Se isso for movido para a troca DBA, peço desculpas. Parece mais Linux do que DB para mim, então aqui vai:
Eu tenho algumas máquinas que executam tarefas agendadas todas as noites e me enviam a saída por e-mail. Não quero e-mails para coisas assim. Em geral acho que a forma como usamos o e-mail está quebrada, mas isso é outra história.
Então comecei a pensar que poderia manter um banco de dados SQLite central que armazenasse informações sobre quando os trabalhos começaram e terminaram, e talvez até mesmo a saída. Então eu poderia simplesmente construir uma página da web que questionasse isso e me informasse o que estava acontecendo ontem à noite.
Então criei um esquema simples e posso executar esse comando no início de um script.
sqlite3 dbname.db "UPDATE data SET LastStart = DATETIME('NOW') WHERE TaskName = 'taskname'"
Agora tenho um registro que indica que meu trabalho começou e a que horas. Viva. Então posso executar um comando semelhante para definir a hora em que o trabalho termina.
Então. Isso funciona muito bem se o banco de dados e as tarefas estiverem na mesma máquina. Vou para outra máquina e preciso atualizar o banco de dados sqlite.... Como posso fazer isso de forma eficiente?
Eu tentei isso
ssh [email protected] 'sqlite3 /home/aaron/dbname.db "UPDATE data SET LastStart = DATETIME('NOW') WHERE TaskName = 'taskname'"'
Mas isso retorna:
Error: no such column: NOW
Tentei algumas variações, mas não cheguei a lugar nenhum.
Estou perto? Eu deveria estar fazendo algo totalmente diferente? Estou reinventando a roda?
Responder1
Tudo isso vem da citação. Tente este:
ssh [email protected] 'sqlite3 /home/aaron/dbname.db "UPDATE data SET \
LastStart = DATETIME('''NOW''') WHERE TaskName = '''taskname'''"'
obs. Você precisa citar NOW
, caso contrário o sqlite tentará encontrar a coluna com esse nome. Mas suas cotações '
serão comidas por cotações do ssh. Você não pode escapar '
, portanto, três aspas '''
são usadas (a primeira cotação ssh, a segunda é a cotação que você precisa passar para o sqlite e a última abre a cotação ssh novamente).
pp. Além disso, você pode inverter aspas como esta:
ssh [email protected] "sqlite3 /home/aaron/dbname.db \"UPDATE data SET \
LastStart = DATETIME('NOW') WHERE TaskName = 'taskname'\""