介紹如何將 crontab 之內執行程式的輸出資料導入 syslog 中儲存。
Crontab 基本寫法
一般來說,如果需要記錄 crontab 執行程式的狀況,最直接的方式就是將所有的輸出(包含正常訊息與錯誤訊息)導入檔案記錄下來:
# 將輸出導入指定的檔案 59 23 * * * /path/to/script.sh > /path/to/output.log 2>&1
這樣寫的話,會讓 /path/to/script.sh
所產生的任何訊息都直接存入 /path/to/output.log
這個記錄檔中。
如果需要將正常訊息與錯誤訊息分開存放,可以將標準輸出(standard output)與標準錯誤(standard error)導入不同檔案:
# 將正常與錯誤輸出分開,導入不同的檔案 59 23 * * * /path/to/script.sh > /path/to/output.log 2> /path/to/error.log
這樣的話 /path/to/script.sh
所產生的正常訊息會儲存在 /path/to/output.log
,而錯誤訊息則會放在 /path/to/error.log
。
將輸出導入 Syslog
如果希望讓 crontab 執行程式的輸出可以導入系統的 syslog 統一存放,可以使用 logger
指令,他會將收到的訊息轉送至系統的 syslog 中記錄下來:
# 將輸出導入 Syslog 59 23 * * * /path/to/script.sh 2>&1 | /usr/bin/logger -t MY_TAG
通常在使用 logger
的時候,會加上 -t
參數並指定一個標籤(tag),標示這一條訊息的應用程式種類或名稱等,這一個標籤會在寫入記錄檔時自動加在訊息之前,方便閱讀或搜尋。
透過 logger
轉送至 syslog 的訊息,通常預設會存放在 /var/log/syslog
這個記錄檔之中,如果希望放在其他位置,可以透過 -p
參數指定 priority(預設為 user.notice
),然後再去更改 syslog 對應規則的儲存位置即可。
參考資料:StackExchange