Shell-Script
cron 中的腳本找不到命令
我有一個腳本可以轉儲數據庫並將 SQL 文件上傳到 Swift。我遇到了腳本在終端中執行良好但在 cron 中失敗的問題。
調試了一下,
/usr/local/bin/swift
發現腳本中沒有找到該命令。這是我的 crontab 條目:
*/2 * * * * . /etc/profile; bash /var/lib/postgresql/scripts/backup
這是我嘗試過的:
- 使用
swift
as 的完整路徑/usr/local/bin/swift
- 在執行
/etc/profile
bash 腳本之前執行腳本。我該如何解決這個問題?
Cron 不會在與使用者相同的環境中執行。如果您執行以下操作,您將明白我的意思:
在終端提示符下鍵入
env
並記下輸出。然後像這樣設置一個 cron 作業並將它的輸出與之前的比較:
*/5 * * * * env > ~/output.txt
您會發現問題很可能是因為
crontab
沒有與PATH
您的使用者相同的變數。作為對此的解決方案,您可以(來自您的 postgres 使用者)echo $PATH
然後將結果復製到您的 crontab 的第一行(類似這樣)PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/jbutryn/.local/bin:/home/jbutryn/bin
或者,如果您想更具體,可以簡單地添加以下內容:
PATH=$PATH:/usr/local/bin
但是,我通常總是將使用者的 PATH 放在 crontab 中,因為我還沒有聽到不這樣做的充分理由,如果你不這樣做,你可能會再次遇到這個問題。