這是 安裝完 CodiMD 後在執行定期備份時踩到的坑…在使用 crontab + script 定期備份時,我百思不得其解,為啥我跑出來的 backup.sql 會是空的? 更讓我不解的是,我手動執行 script 的結果卻是正常的!???
CodiMD 官方給定指令是長這樣,在手動執行它運作的非常好
1 |
|
但偏偏 crontab + docker-compose 這兩個加在一起就是跑不起來 Orz。
一開始懷疑過是不是權限問題,使用 crontab 執行時沒有 docker-compose 的執行權限或是寫出的權限。基本上後者可以排除,因為我直接輸出在 home 目錄下,不至於沒有寫出的權限。
所以就先考慮是不是 docker-compose 的執行權限出問題,直接加 sudo ,但還是輸出的 backup.sql 還是空:
1 |
|
查了一下相關討論,大家是建議最好使用絕對路徑,因此將 docker-compose 換成 /usr/local/bin/docker-compose,但還沒用
1 |
|
執行時多加了兩行,確認一下執行身分與路徑有沒有跑掉,但看起來也一切正常。
1 |
|
後來D大跟我說他試出來了,在指令上加 -T 就正常了:
1 |
|
查了一下 -T 是禁用 TTY ,docker-compose exec 是預設有啟用 TTY,而 crontab 是沒有預設 TTY(終端設備),所以將 docker-compose exec 加上 -T 就可以。
不過我還是不太明白,即便預設有啟用 TTY,但 Script 在執行過程並有任何輸出到終端機上,我以為這樣應該不會卡死才對 @@?