Führen Sie den Befehl remote sqlite aus

8

Sollte dies auf die DBA-Vermittlungsstelle verschoben werden, entschuldige ich mich. Fühlt sich für mich eher nach Linux als nach DB an.

Ich habe einige Maschinen, die jeden Abend geplante Cron-Jobs ausführen und mir die Ausgabe per E-Mail senden. Ich möchte keine E-Mails für solche Dinge. Im Allgemeinen denke ich, dass die Art und Weise, wie wir E-Mails verwenden, kaputt ist, aber das ist eine andere Geschichte.

Also begann ich zu denken, dass ich eine zentrale SQLite-Datenbank führen könnte, in der Informationen darüber gespeichert sind, wann die Jobs gestartet und beendet wurden, und möglicherweise sogar die Ausgabe. Dann könnte ich einfach eine Webseite erstellen, die das abfragt und mich wissen lässt, dass es letzte Nacht los ist.

Also habe ich mir ein einfaches Schema ausgedacht und kann diesen Befehl am Anfang eines Skripts ausführen.

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

Jetzt habe ich eine Aufzeichnung, aus der hervorgeht, dass mein Job zu welchem ​​Zeitpunkt begonnen hat. Hurra. Dann kann ich einen ähnlichen Befehl ausführen, um die Zeit festzulegen, zu der der Job endet.

Damit. Das funktioniert hervorragend, wenn sich die Datenbank und die Aufgaben auf demselben Computer befinden. Ich gehe zu einem anderen Computer und muss die SQLite-Datenbank aktualisieren. Wie kann ich das effizient tun?

Ich habe es versucht

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

Aber das kehrt zurück:

Error: no such column: NOW

Ich habe einige Variationen ausprobiert, bin aber nicht weitergekommen.

Bin ich nah dran Soll ich etwas ganz anderes machen? Erfinde ich das Rad neu?

LVLAaron
quelle

Antworten:

10

Das ist alles aus dem Zitieren. Probier diese:

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

ps. Sie müssen zitieren NOW, sonst versucht sqlite, eine Spalte mit einem solchen Namen zu finden. Aber Ihre Zitate 'werden von Zitaten von ssh gegessen. Sie können nicht entkommen ', daher werden drei Anführungszeichen '''verwendet (das erste Off-SSH-Zitat, das zweite das Zitat, das Sie an SQLite übergeben müssen, und das letzte offene SSH-Zitat erneut).

pps. Außerdem können Sie Anführungszeichen wie folgt umkehren:

ssh [email protected] "sqlite3 /home/aaron/dbname.db \"UPDATE data SET \
LastStart = DATETIME('NOW') WHERE TaskName = 'taskname'\""
eilen
quelle
Der erste Befehl, den Sie gegeben haben, funktioniert nicht. gleicher Fehler.
LVLAaron
2
Der zweite Befehl funktioniert jedoch hervorragend.
LVLAaron