executa o comando sqlite remoto

6

Se isso deve ser movido para a troca de DBA, peço desculpas. Parece mais linux do que DB para mim, então aqui vai:

Eu tenho algumas máquinas que executam tarefas cron agendadas todas as noites e me enviam a saída por e-mail. Eu não quero e-mails para coisas assim. Em geral, acho que o modo como usamos o email está quebrado, mas isso é outra história.

Então eu comecei a pensar que eu poderia manter um banco de dados SQLite central que armazenasse informações sobre quando os trabalhos começavam e terminavam, e talvez até mesmo a saída. Então eu poderia apenas construir uma página da Web que consulta isso e me diga 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'"

Então, agora eu tenho um registro que afirma que meu trabalho começou e a que horas. Viva. Então eu posso executar um comando semelhante para colocar o tempo que o trabalho termina.

Isso funciona muito bem se o banco de dados e as tarefas estiverem na mesma máquina. Eu 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

Eu tentei algumas variações, mas não cheguei a lugar nenhum.

Eu estou perto? Eu deveria estar fazendo algo totalmente diferente? Eu estou reinventando a roda?

    
por LVLAaron 25.06.2012 / 21:20

1 resposta

8

Isso tudo vem da citação. Experimente este:

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

ps. Você precisa citar NOW , senão o sqlite tentará encontrar colunas com esse nome. Mas suas cotas ' serão comidas por citações de ssh. Você não pode escapar ' , portanto, três citações ''' são usadas (a primeira cotação ssh, segunda a citação que você precisa passar para sqlite e a última cota ssh aberta novamente).

pps. Além disso, você pode inverter aspas assim:

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