cron 錯誤記錄在哪裡?

cron 錯誤記錄在哪裡?

如果我cron錯誤地設定作業,它們似乎會默默地失敗。我應該在哪裡查找錯誤日誌以了解出了什麼問題?

答案1

正如其他人指出的那樣,cron將透過電子郵件將其運行的任何程式的輸出發送給您(如果有任何輸出)。因此,如果沒有得到任何輸出,基本上有三種可能性:

  1. crond甚至無法啟動 shell 來運行程式或發送電子郵件
  2. crond郵寄輸出時遇到問題,或郵件遺失。
  3. 程式沒有產生任何輸出(包括錯誤訊息)

情況 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 實作上的可配置設定。

相關內容