выполнить удаленную команду sqlite

выполнить удаленную команду sqlite

Если это должно быть перенесено в DBA exchange, я извиняюсь. Для меня это больше похоже на linux, чем на DB, так что вот:

У меня есть несколько машин, которые запускают запланированные задания cron каждую ночь и отправляют мне вывод по электронной почте. Я не хочу получать электронные письма за такие вещи. В целом я думаю, что способ, которым мы используем электронную почту, сломан, но это уже другая история.

Поэтому я начал думать, что я мог бы вести центральную базу данных SQLite, которая хранила бы информацию о том, когда задания начинались и заканчивались, и, возможно, даже о выходе. Затем я мог бы просто создать веб-страницу, которая запрашивала бы это и давала бы мне знать, что происходило вчера вечером.

Поэтому я придумал простую схему и могу запустить эту команду в начале скрипта.

sqlite3 dbname.db "UPDATE data SET LastStart = DATETIME('NOW') WHERE TaskName = 'taskname'"

Итак, теперь у меня есть запись, в которой указано, когда и в какое время началась моя работа. Ура. Затем я могу запустить аналогичную команду, чтобы указать время окончания работы.

Итак. Это отлично работает, если база данных и задачи находятся на одной машине. Я перехожу на другую машину и мне нужно обновить базу данных sqlite... Как мне сделать это эффективно?

Я попробовал это

ssh [email protected] 'sqlite3 /home/aaron/dbname.db "UPDATE data SET LastStart = DATETIME('NOW') WHERE TaskName = 'taskname'"'

Но это возвращает:

Error: no such column: NOW

Я пробовал разные варианты, но ничего не вышло.

Я близок? Мне следует сделать что-то совершенно другое? Я изобретаю велосипед?

решение1

Это все из цитирования. Попробуйте это:

ssh [email protected] 'sqlite3 /home/aaron/dbname.db "UPDATE data SET \
LastStart = DATETIME('''NOW''') WHERE TaskName = '''taskname'''"'

ps. Вам нужно заключить в кавычки NOW, иначе sqlite попытается найти столбец с таким именем. Но ваши кавычки 'будут съедены кавычками из ssh. Вы не можете экранировать ', поэтому используются три кавычки '''(первая — кавычка из ssh, вторая — кавычка, которую нужно передать в sqlite, а последняя — снова кавычка из ssh).

pps. Кроме того, вы можете инвертировать кавычки следующим образом:

ssh [email protected] "sqlite3 /home/aaron/dbname.db \"UPDATE data SET \
LastStart = DATETIME('NOW') WHERE TaskName = 'taskname'\""

Связанный контент