1. 程式人生 > >crontab 配置、日誌使用記錄

crontab 配置、日誌使用記錄

公司伺服器的系統為CentOS 6.4,經常需要使用Crontab命令去執行一系列的應用指令碼,也經常遇到種種的問題,現將自己在使用Crontab命令過程中遇到的一些問題彙總如下,以備後用。
格式說明
對於crontab命令的格式,借用網路上一張超牛的圖片來說明吧:
這裡寫圖片描述

檢視日誌的方法
當crontab命令未如預期計劃執行的時候,linux下可以通過檢視crontab日誌回查任務hang住的具體原因,具體檢視方法是檢視檔案/var/log/cron。

問題彙總
下面是自己在配置crontab的過程中遇到的一些問題,現記錄如下:
1.問題描述:
寫了一個指令碼新增至crontab定時任務執行,測試的時候,使用手工執行shell命令執行成功,但是crontab定時任務卻並沒有執行;
解決方案:
這種問題是由於crontab執行是分使用者執行的,環境變數的匯入會有問題,一般都需要對指令碼的路徑及輸出日誌的路徑寫成絕對路徑,同時,在shell指令碼中,增加配置檔案source ~/.bash_profile,匯入環境變數。

2.問題描述:
crontab 執行指令碼需要將shell指令碼的輸出重定向至日誌檔案,日誌檔案的命名方式為日期.log,如20150101.log。
可以將crontab任務編寫如下:

test.sh>>./`date -d last-day +%Y%m%d`.log >&1

3.問題描述:
編寫了一個指令碼test.sh,手工執行指令碼 test.sh>>./date -d last-day +%Y%m%d.log >&1 執行沒有問題,日誌也按照日期格式生成了。但是把這個任務加入crontab以後,任務卻沒有正確執行;

* * * * * /app/test
/dustbin/HY/test.sh>>/app/test/dustbin/HY/`date -d last-day +%Y%m%d`.log >&1

查看了crontab的日誌,發現crontab任務下,shell的目錄路徑不完整了:
Dec 9 11:26:01 host_name CROND[8066]: (test) CMD (/app/test/dustbin/HY/test.sh>>/app/test/dustbin/HY/`date -d last-day +)
解決方案:
需要對上述指令碼進行一次轉義的修改,修改後如下:

* * * * * /app/test/dustbin/
HY/test.sh>>/app/test/dustbin/HY/`date -d last-day +\%Y\%m\%d`.log >&1

修改後,crontab任務執行順利完成。