
如果我cron
錯誤地設定作業,它們似乎會默默地失敗。我應該在哪裡查找錯誤日誌以了解出了什麼問題?
答案1
正如其他人指出的那樣,cron
將透過電子郵件將其運行的任何程式的輸出發送給您(如果有任何輸出)。因此,如果沒有得到任何輸出,基本上有三種可能性:
crond
甚至無法啟動 shell 來運行程式或發送電子郵件crond
郵寄輸出時遇到問題,或郵件遺失。- 程式沒有產生任何輸出(包括錯誤訊息)
情況 1. 不太可能,但應該在 cron 日誌中寫入一些內容。 Cron 有一個自己保留的系統日誌工具,因此您應該查看/etc/syslog.conf
(或發行版中的等效檔案)以查看工具訊息cron
傳送到的位置。熱門目的地包括/var/log/cron
、/var/log/messages
和/var/log/syslog
。
在情況 2 中,您應該檢查郵件程式守護程式日誌:來自 Cron 守護程式的訊息通常顯示為 from root@yourhost
。您可以使用MAILTO=...
crontab 檔案中的一行讓 cron 向特定位址發送電子郵件,這樣可以更輕鬆地 grep 郵件程式守護程式日誌。例如:
[email protected]
00 15 * * * echo "Just testing if crond sends email"
在情況 3. 中,您可以透過附加另一個命令來測試程式是否實際運行,您可以輕鬆檢查其效果:例如,
00 15 * * * /a/command; touch /tmp/a_command_has_run
因此您可以crond
透過查看 的 mtime 來檢查是否實際運行了某些內容/tmp/a_command_has_run
。
答案2
您始終可以明確地將作業輸出傳送到日誌檔案:
0 8 * * * /usr/local/bin/myjob > /var/log/myjob.log 2>&1
請記住,這將取代先前提到的郵件行為,因為 crond 本身不會收到作業的任何輸出。如果你想保持這種行為,你應該看看 tee(1)。
答案3
如果您沒有看到郵件,則可能是在向 root@yourcompany 發送垃圾郵件,其中包含錯誤,這對於使用該帳戶進行監控的人員來說可能非常煩人。嘗試將輸出傳送到 Syslog:
*/5 * * * * yourcronjob 2>&1 | /usr/bin/logger -t yourtag
然後,等待 cronjob 運行並在 /var/log/messages(或某些系統上的 /var/log/user.log)中尋找錯誤。
這對於只有 1-2 行長的錯誤訊息非常有效,例如「yourcronjob:找不到命令」。它還利用您現有的系統日誌基礎設施(Logrotation、中央系統日誌記錄、Splunk 等)。
如果您的 cronjob 產生數百行輸出,這可能不是一個好的解決方案。
答案4
預設的 cron 配置將向您發送一封包含程式輸出的郵件。如果失敗,您可以嘗試將失敗的程式包裝在 shell 腳本中,以確保程式不會失敗,並且您可以進一步記錄輸出。
這是某些 cron 實作上的可配置設定。