如果應該將其轉移到 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'\""