1. 程式人生 > >建立crontab後,注意環境變數問題

建立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