我嘗試使用以下 crontab 命令每天更新我的程式碼庫。但當我測試它時,第一步本身就不起作用。
27 15 * * * . cd /home/covuser/user/ && . /home/covuser/user/conf.sh
40 17 * * * . cd /home/covuser/user && . /home/covuser/user/checkout.sh
conf.sh 包含進行程式碼簽出所需的環境變數。 checkout.sh 檔案執行結帳流程。
第一行應該設定所需的環境變數。但這並沒有發生。
這其中犯了什麼錯誤呢?提前致謝。
答案1
crontab 中的每一行代表一個單獨的作業,該作業將獨立規劃和執行。
這意味著在您的情況下,尤其是它們在不同的 shell 會話中運行,因此在一個作業中取得腳本檔案來設定某些環境變數不會影響稍後執行另一個作業的環境。
您必須更改進程並在同一個 shell 會話中執行這兩個腳本,因此最簡單的是在同一個 cron 作業中執行。
如果您需要在運行之間延遲,您可以透過例如sleep
而不是在固定的稍後時間安排不同的作業來實現這一點。
哦,當然,正如其他一些評論和答案中指出的那樣,您只能使用來源腳本來.
使它們在當前 shell 環境而不是子 shell 中運行。不過,cd
不是腳本而是內建的shell指令,反正總是在目前shell環境下運行,所以寫起來. cd somehwere
也是錯誤的。
答案2
我相信問題出在.
前面的cd
.
.
(別名 fro source
)允許您取得文件。這不適用於 shell 內建命令,例如cd
,因為它們不是可以獲取來源的可執行檔。
當您使用 AND - 連接兩個命令時&&
,shell 會跳過失敗的命令後面的任何命令,因為它們不會更改結果結果值 ( false && true == false
)。如果您希望有其他行為,可以將 the 替換&&
為 a 。;
這應該有效:
27 15 * * * cd /home/covuser/user/ && . /home/covuser/user/conf.sh
40 17 * * * cd /home/covuser/user && . /home/covuser/user/checkout.sh
更新:如果腳本是相關的(我認為是相關的?),請在一個會話中運行所有內容。 (將開啟一個新的 bash 會話來執行每個 cron 條目)
27 15 * * * cd /home/covuser/user/ && . /home/covuser/user/conf.sh && . /home/covuser/user/checkout.sh