Если это должно быть перенесено в 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'\""