crontab 指令碼錯誤日誌和正確的輸出寫入到檔案
阿新 • • 發佈:2018-12-18
如果crontab不重定向輸出,並且crontab所執行的命令有輸出內容的話,是一件非常危險的事情。因為該輸出內容會以郵件的形式傳送給使用者,內容儲存在郵件檔案
/var/spool/mail/$user
如果命令執行比較頻繁(如每分鐘一次),或者命令輸出內容較多,會使這個郵件檔案不斷追加內容,檔案越來越大。而郵件檔案一般存放在根分割槽,根分割槽一般相對較小,所以會造成根分割槽寫滿而無法登入伺服器。
不輸出內容
*/5 * * * * /root/XXXX.sh &>/dev/null 2>&1
將正確和錯誤日誌都輸出到 /tmp/load.log
*/1 * * * * /root/XXXX.sh > /tmp/load.log 2>&1 &
只輸出正確日誌到 /tmp/load.log
*/1 * * * * /root/XXXX.sh > /tmp/load.log & 等同於 */1 * * * * /root/XXXX.sh 1>/tmp/load.log &
只輸出錯誤日誌到 /tmp/load.log
*/1 * * * * /root/XXXX.sh 2> /tmp/load.log &
名詞解釋
在shell中,每個程序都和三個系統檔案相關聯:標準輸入stdin,標準輸出stdout和標準錯誤stderr,三個系統檔案的檔案描述符分別為0,1和2。所以這裡2>&1的意思就是將標準錯誤也輸出到標準輸出當中。
> 就相當於 1> 也就是重定向標準輸出,不包括標準錯誤。通過2>&1,就將標準錯誤重定向到標準輸出了(stderr已作為stdout的副本),那麼再使用>重定向就會將標準輸出和標準錯誤資訊一同重定向了。如果只想重定向標準錯誤到檔案中,則可以使用2> file。
crontab日誌每天生成一個檔案
#!/bin/bash curl http://task.bluelive.me/api/crontab >> ~/cronLog/cron_`date +\%Y\%m\%d`.log ~/cronLog/cron_`date +\%Y\%m\%d`.log date >> ~/cronLog/cron_`date +\%Y\%m\%d`.log echo -e >> ~/cronLog/cron_`date +\%Y\%m\%d`.log
生成檔名為:cron_20161108.log
在crontab中%是有特殊含義的,表示換行的意思。如果要用的話必須進行轉義%,如經常用的date ‘+%Y%m%d’在crontab裡是不會執行的,應該換成date ‘+%Y%m%d’。