Shell-Script

cron 中的腳本找不到命令

  • August 22, 2017

我有一個腳本可以轉儲數據庫並將 SQL 文件上傳到 Swift。我遇到了腳本在終端中執行良好但在 cron 中失敗的問題。

調試了一下,/usr/local/bin/swift發現腳本中沒有找到該命令。

這是我的 crontab 條目:

*/2 * * * * . /etc/profile; bash /var/lib/postgresql/scripts/backup  

這是我嘗試過的:

  1. 使用swiftas 的完整路徑/usr/local/bin/swift
  2. 在執行/etc/profilebash 腳本之前執行腳本。

我該如何解決這個問題?

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 中,因為我還沒有聽到不這樣做的充分理由,如果你不這樣做,你可能會再次遇到這個問題。

引用自:https://unix.stackexchange.com/questions/384713