Linux

Cron 執行我的腳本,但腳本沒有做任何事情,與郵件錯誤有關???“得到狀態 0x004b#012”

  • June 7, 2013

我管理的一台 Ubuntu 10.10 Web 伺服器有一個非常奇怪的問題。

我使用 ruby​​ 和 rake 編寫了一個腳本來執行一些 tar 命令並執行數據庫的 mysqldump。我已經在 root 使用者 crontab 中安裝了一個條目,如下所示:

0 0,12 * * * /bin/bash -l -c 'cd /my/script/path && rake backup:everything'

這在其中一台伺服器上執行良好。但是另一方面,這實際上似乎並沒有執行我的腳本中的內容。

我知道它被要求明確,因為當我跑步時

grep CRON /var/log/syslog

它返回:

Mar 22 12:00:01 ServerName CRON[10273]: (root) CMD (/bin/bash -l -c 'cd /my/script/path && rake backup:everything')

但是,它絕對沒有在該腳本中執行什麼操作。

當我像這樣直接執行腳本時:

cd /my/script/path && sudo rake backup:everything

它完美地工作。

我也在兩台伺服器的 crontab 中這樣做了:

0 0,12 * * * /bin/bash -l -c 'cd /my/script/path && rake backup:everything >> output.txt'

(就像在腳本中我經常做一個“放置’備份x文件夾’”)

在 cron 作業正在執行的伺服器上,它會創建 output.txt 文件並將預期的輸出放入其中,例如“開始備份”等。

但是,在它不工作的伺服器上,它只會創建文件但將其留空。但是當我再次從系統日誌中複製命令並手動執行它時:

sudo /bin/bash -l -c 'cd /my/script/path && rake backup:everything >> output.txt'

它工作正常,輸出符合預期。

我現在可能正抓著稻草,但這可能與此有關:

CRON[10271]: (root) MAIL (mailed 55 bytes of output but got status 0x004b#012)

這會在每次cron 呼叫後出現在 syslog 中。我只有這個 cron 工作和另一個小任務來更新系統時鐘,但從外觀上看,它們都沒有正常工作。

不正確的郵件配置會殺死我的 cron 工作嗎?這甚至可能嗎?

您應該在 cron 行中提供 rake 的完整路徑。就像是:

/sbin/rake或它實際居住的地方。

如果 rake 所在的路徑不在您的 root 使用者路徑中,它將無法執行。

如果是郵件,您應該在郵件日誌中看到一些內容。檢查那裡。

當您處理 cron 時,請始終考慮環境變數。您最好執行導入環境變數(源)的 bash 腳本並執行您的命令。

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