執行遠端sqlite指令

執行遠端sqlite指令

如果應該將其轉移到 DBA 交換中心,我深表歉意。對我來說,感覺更像是 Linux 而不是 DB,所以這裡是:

我有一些機器每晚運行預定的 cron 作業並透過電子郵件將輸出發送給我。我不想要這樣的電子郵件。總的來說,我認為我們使用電子郵件的方式已經被破壞,但那是另一回事了。

所以我開始考慮我可以保留一個中央 SQLite 資料庫來儲存有關作業何時開始和完成的信息,甚至可能是輸出的信息。然後我可以建立一個網頁來查詢,並讓我知道昨晚發生了什麼。

因此,我想出了一個簡單的架構,並且可以在腳本的開頭執行此命令。

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

所以現在我有一個記錄,顯示我的工作開始於什麼時間。萬歲。然後我可以執行類似的命令來設定作業結束的時間。

所以。如果資料庫和任務位於同一台電腦上,那麼效果很好。我轉到另一台機器,需要更新 sqlite 資料庫......我怎麼能有效地做到這一點?

我試過這個

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

但這會回來:

Error: no such column: NOW

我嘗試了一些變化,但沒有任何進展。

我很接近嗎?我應該做一些完全不同的事情嗎?我是在重新發明輪子嗎?

答案1

這一切都來自於引用。試試這個:

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

附:您需要引用NOW,否則 sqlite 將嘗試尋找具有此類名稱的列。但是你的引用'將會被 ssh 的引用所吞噬。您無法轉義',因此使用了三個引號'''(第一個是 ssh 引號,第二個是您需要傳遞給 sqlite 的引號,最後一個再次是開啟 ssh 引號)。

pps。此外,您也可以像這樣反引號:

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

相關內容