realizar comando sqlite remoto

realizar comando sqlite remoto

Si esto debe trasladarse al intercambio de DBA, me disculpo. Me parece más Linux que DB, así que aquí va:

Tengo algunas máquinas que ejecutan trabajos cron programados todas las noches y me envían el resultado por correo electrónico. No quiero correos electrónicos para cosas como esta. En general creo que la forma en que utilizamos el correo electrónico no funciona, pero esa es otra historia.

Entonces comencé a pensar que podría mantener una base de datos SQLite central que almacenara información sobre cuándo comenzaron y terminaron los trabajos, y tal vez incluso el resultado. Luego podría crear una página web que consulte eso y me informe sobre lo que sucedió anoche.

Entonces se me ocurrió un esquema simple y puedo ejecutar este comando al comienzo de un script.

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

Entonces ahora tengo un registro que indica que mi trabajo comenzó y a qué hora. Hurra. Luego puedo ejecutar un comando similar para establecer la hora en que finaliza el trabajo.

Entonces. Eso funciona muy bien si la base de datos y las tareas están en la misma máquina. Voy a otra máquina y necesito actualizar la base de datos sqlite.... ¿Cómo puedo hacerlo de manera eficiente?

Probé esto

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

Pero eso regresa:

Error: no such column: NOW

Probé algunas variaciones pero no llegué a ninguna parte.

¿Estoy cerca? ¿Debería hacer algo totalmente diferente? ¿Estoy reinventando la rueda?

Respuesta1

Todo eso proviene de las citas. Prueba este:

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

PD. Debe citar NOW; de lo contrario, sqlite intentará encontrar una columna con ese nombre. Pero sus cotizaciones 'serán devoradas por cotizaciones de ssh. No puede escapar ', por lo tanto se utilizan tres comillas '''(la primera es la comilla de ssh, la segunda es la comilla que necesita pasar a sqlite y la última abre la comilla de ssh nuevamente).

PP. Además puedes invertir comillas como esta:

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

información relacionada