executar comando sqlite remoto

executar comando sqlite remoto

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'\""

informação relacionada