Shell
在非互動式外殼中執行腳本?
我有一個執行腳本的 cron 作業。當我通過互動式外殼(ssh’ed to bash)執行腳本時,它工作正常。當腳本通過 cron 自行執行時,它會失敗。
我的猜測是它使用了互動式 shell 中設置的一些環境變數。我將對腳本進行故障排除並刪除這些。
進行更改後,我知道我可以在 cron 中將腳本排隊以使其正常執行,但是有沒有一種方法可以從命令行執行腳本,但告訴它像從 cron 一樣執行 -即在非互動環境中?
從 cron 執行命令和在命令行上執行的主要區別是:
- cron 可能正在使用不同的 shell(通常
/bin/sh
);- cron 肯定是在一個小環境中執行(哪些取決於 cron 實現,因此請查看
cron(8)
orcrontab(5)
手冊頁;通常只有HOME
、也許SHELL
、也許LOGNAME
、也許USER
和一個小的PATH
);- cron 對
%
字元進行特殊處理(變成換行符);- cron 作業無需終端或圖形環境即可執行。
以下呼叫將執行 shell 片段,就像從 cron 呼叫它一樣。我假設該片段不包含字元
'
或%
.env - HOME="$HOME" USER="$USER" PATH=/usr/bin:/bin /bin/sh -c 'shell snippet' </dev/null >job.log 2>&1
另請參閱從 cron 執行 sh 腳本,這可能有助於解決您的問題。