建立crontab後,注意環境變數問題
有時我們建立了一個crontab,但是這個任務卻無法自動執行,而手動執行這個任務卻沒有問題,這種情況一般是由於在crontab檔案中沒有配置環境變數引起的。
在crontab檔案中定義多個排程任務時,需要特別注意的一個問題就是環境變數的設定,因為我們手動執行某個任務時,是在當前shell環境下進行的,程式當然能找到環境變數,而系統自動執行任務排程時,是不會載入任何環境變數的,因此,就需要在crontab檔案中指定任務執行所需的所有環境變數,這樣,系統執行任務排程時就沒有問題了。
不要假定cron知道所需要的特殊環境,它其實並不知道。所以你要保證在shelll指令碼中提供所有必要的路徑和環境變數,除了一些自動設定的全域性變數。所以注意如下3點:
1)指令碼中涉及檔案路徑時寫全域性路徑;
2)指令碼執行要用到java或其他環境變數時,通過source命令引入環境變數,如:
cat start_cbp.sh
#!/bin/sh
source /etc/profile
export RUN_CONF=/home/d139/conf/platform/cbp/cbp_jboss.conf
/usr/local/jboss-4.0.5/bin/run.sh -c mev &
3)當手動執行指令碼OK,但是crontab死活不執行時。這時必須大膽懷疑是環境變數惹的禍,並可以嘗試在crontab中直接引入環境變數解決問題。如:
0 * * * * . /etc/profile;/bin/sh /var/www/java/audit_no_count/bin/restart_audit.sh
匯入環境變數
有兩種匯入方法:
1.在crontab -e編輯時加入
?1 2 3 4 |
. /etc/profile ; /bin/sh #主要"."後要有個空格
#例子
0 12 * * * . /etc/profile ; /bin/sh /your/sh/your_sh .sh
|
2.在你要執行的指令碼的開頭加入
?1 |
source /etc/profile
|
1. linux
看 /var/log/cron這個檔案就可以,可以用tail -f /var/log/cron觀察
2. unix
在 /var/spool/cron/tmp檔案中,有croutXXX001864的tmp檔案,tail 這些檔案就可以看到正在執行的任務了。
3. mail任務
在 /var/spool/mail/root 檔案中,有crontab執行日誌的記錄,用tail -f /var/spool/mail/root 即可檢視最近的crontab執行情況。
來自:http://www.cnblogs.com/peida/archive/2013/01/08/2850483.html