2011-01-27 95 views
133

我想知道我是如何看到cron作業在每次執行時所做的。日誌文件位於何處?或者我可以將輸出發送到我的電子郵件嗎?我已經設置了電子郵件地址以在cron作業運行時發送日誌,但我還沒有收到任何內容。Cron作業日誌 - 如何登錄?

回答

216
* * * * * myjob.sh >> /var/log/myjob.log 2>&1 

將記錄從cron作業全部輸出到/var/log/myjob.log

您可以使用mail發送電子郵件。大多數系統將通過電子郵件發送未處理的cron作業輸出到根或相應的用戶。

+51

描述是什麼意思`2>&1`:http://stackoverflow.com/questions/818255/in-the-bash-shell-what-is-21 – Yamaneko 2012-09-26 14:26:30

+4

如果從未創建該日誌文件,可能會出現什麼問題? – clamp 2013-12-20 10:57:28

+9

FWIW,如果你想在日誌中使用`stderr`和`stdout`,`2>&1`必須在間接後面出現:`myjob.sh >> /var/log/myjob.log 2>&1` – 2014-04-23 17:08:01

8

這裏是我的代碼:

* * * * * your_script_fullpath >> your_log_path 2>&1 
7

有至少有三個不同類型的日誌記錄:

  1. 程序之前使用日誌記錄被執行時,其僅當 的cronjob試圖執行該命令日誌。那個位於 /var/log/syslog,正如@Matthew Lock所述。

  2. 程序試圖執行後發生的錯誤記錄,可以通過電子郵件或文件發送到 ,如@Spliffster所述。我喜歡記錄 到一個文件中,因爲使用電子郵件,那麼你有 問題的新來源,其是否電子郵件發送和接收工作完美 檢查。有時候是,有時候不是。例如,在一個 簡單的普通臺式機中,你有沒有興趣 配置SMTP,有時你會更喜歡記錄到文件:

    * * * * COMMAND_ABSOLUTE_PATH > /ABSOLUTE_PATH_TO_LOG 2>&1 
    
    • 我也會考慮檢查/ ABSOLUTE_PATH_TO_LOG權限,並從該用戶的權限運行該命令。只是爲了驗證,而您測試它是否可能是問題的潛在來源。
  3. 程序本身的日誌記錄,以自身的錯誤處理和日誌記錄進行跟蹤。

cronjobs存在一些常見的問題來源: *要執行的二進制文件的ABSOLUTE PATH。當您從 shell中運行它,它可能工作,但cron進程似乎使用另一個 環境,因此它並不總能找到二進制文件,如果你不 使用絕對路徑。 *二進制文件使用的庫。它或多或少與前一點相同,但要確保如果簡單地放置命令的名稱,就是指使用相同庫的二進制文件,或者更好地檢查是否使用絕對路徑引用二進制文件與您直接使用控制檯時所提到的完全相同。二進制文件可以使用定位命令中找到,例如:

$locate python 

確保二進制你參考,是非常相同你調用你的shell,或者乾脆在你的shell使用再次測試二進制你打算放在cronjob中的絕對路徑。

  • 另一個常見的問題是cronjob中的語法。請記住,有一個你可以使用列表(逗號)的特殊字符,定義範圍(破折號 - ),定義的範圍(斜線)增量等請看: http://www.softpanorama.org/Utilities/cron.shtml
1

櫃面你用sudo運行一些命令,它不會允許它。 Sudo需要一個tty。

1

在Ubuntu上,您可以啓用cron.log文件來僅包含CRON條目。

取消註釋,在/etc/rsyslog.d/50-default.conf文件提到cron行:

# Default rules for rsyslog. 
# 

#      For more information see rsyslog.conf(5) and /etc/rsyslog.conf 

# 
# First some standard log files. Log by facility. 
# 
auth,authpriv.*     /var/log/auth.log 
*.*;auth,authpriv.none   -/var/log/syslog 
#cron.*       /var/log/cron.log 

保存並關閉文件,然後重新啓動rsyslog服務:

sudo systemctl restart rsyslog 

您現在可以看到在自己的cron日誌條目文件:

sudo tail -f /var/log/cron.log 

示例輸出:

Jul 18 07:05:01 machine-host-name CRON[13638]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1) 

但是,你不會看到什麼腳本實際上裏面/etc/cron.daily/etc/cron.hourly運行更多的信息,除非這些腳本直接輸出到cron.log(或者是一些其他的日誌文件)。

如果您想驗證一個crontab中運行,而不必尋找它在cron.logsyslog,創建一個重定向輸出到您選擇的日誌文件的crontab - 喜歡的事:

# For more information see the manual pages of crontab(5) and cron(8) 
# 
# m h dom mon dow command 
30 2 * * 1 /usr/local/sbin/certbot-auto renew >> /var/log/le-renew.log 2>&1 

步驟取自:https://www.cyberciti.biz/faq/howto-create-cron-log-file-to-log-crontab-logs-in-ubuntu-linux/

0

以上所有都不適用於我。所以,我必須在/etc/cron.d/的crontab文件頂部添加'MAILTO = [我的電子郵件]',並且我得到了答案,因爲我的cron命令出錯了。

0

cron已將其通過郵件運行的每個作業的標準輸出和標準錯誤發送給cron作業的所有者。

您可以在crontab文件中使用MAILTO=recipient將電子郵件發送到其他帳戶。

爲此,您需要讓郵件正常工作。發送到本地郵箱通常不是問題(事實上,有可能ls -l "$MAIL"會顯示你已經收到了一些郵件),但是將它從盒子中取出併發布到互聯網上需要MTA(Postfix,Sendmail,你有什麼)以正確配置連接到世界。