Linux
Cron 執行我的腳本,但腳本沒有做任何事情,與郵件錯誤有關???“得到狀態 0x004b#012”
我管理的一台 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 腳本並執行您的命令。