Backup

為什麼我的 cron 作業找不到特定命令?

  • September 14, 2010

我正在使用 duplicity 通過 FTP 創建伺服器的夜間備份。我編寫了一個腳本,它同時進行本地和遠端備份並記錄輸出結果。當我以 root 使用者身份執行此腳本時,它執行得很好。但是,當我將其設置為 cron 作業並執行它時,腳本會執行,但 ftp 部分會失敗。在我收到一條錯誤消息後不久,“ncftpls - 找不到命令,請安裝 ncftp 3.1.9 或更高版本”,但它已安裝!cron作業無法找到機器上存在的命令是否有某種原因?它有自己的 PATH 或類似的東西嗎?

任何幫助是極大的讚賞,

麥克風

你用的是絕對路徑嗎?Cron 作業不會打開互動式 shell,因此通常設置 PATH 的 bash 初始化腳本(bashrc、bash_profile 等)可能無法執行——如果是,它們將使用 root,而不是你的。如果您不確定該命令在哪裡,您可以使用它which <command>來找出絕對路徑。

在處理 cron 腳本時,一般的經驗法則是,您要麼 (a) 要設置 PATH,要麼 (b) 使用絕對路徑。

祝你好運!

您應該提供要執行的命令的完整路徑,或者應該PATH在 cron 作業中定義。

在不提供路徑的情況下執行 foobar 命令的範例:

PATH=/sbin:/bin:/usr/sbin:/usr/bin
01 * * * * root foobar

有一條路徑:

01 * * * * root /usr/bin/foobar

您還可以通過以下設置來指定執行作業的 shell SHELLSHELL=/bin/bashfor bash。有關man 5 crontab更多範例,請參閱。

引用自:https://serverfault.com/questions/180802