、腳本語法錯誤
在crontab腳本沒有定時執行的時候,首先需要檢查腳本的語法有沒有出現問題。
2、環境變量問題
有時我們創建了一個crontab,但是這個任務卻無法自動執行,而手動執行這個任務卻沒有問題,這種情況一般是由於在crontab文件中沒有配置環境變量引起的。我們在手動執行任務時是在當前shell環境下進行的,程序能夠找到環境變量,而系統自動執行任務調度時,是不會加載任何環境變量的。因此,我們需要在shelll腳本中提供所有必要的路徑和環境變量。
需要注意的主要有以下三點:
1)腳本中涉及文件路徑時寫全局路徑;
2)腳本執行要用到java或其他環境變量時,通過source命令引入環境變量,如:
1 2 3 4 5 |
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中直接引入環境變量解決問題。如:
1 |
0 * * * * . /etc/profile;/bin/sh /var/www/java/audit_no_count/bin/restart_audit.sh |
3、系統任務調度及用戶任務調度
系統任務調度主要完成系統的一些維護操作,用戶任務調度主要完成用戶自定義的一些任務,可以將用戶任務調度放到系統任務調度來完成(不建議這么做),但是反過來卻不行,root用戶的任務調度操作可以通過“crontab –uroot –e”來設置,也可以將調度任務直接寫入/etc/crontab文件,需要注意的是,如果要定義一個定時重啟系統的任務,就必須將任務放到/etc/crontab文件,即使在root用戶下創建一個定時重啟系統的任務也是無效的。
crontab定時任務不執行的解決辦法
1、查看crontab執行記錄
如果出現了crontab定時任務不執行的情況,首先需要定位問題,那么就需要通過日志來確定問題所在。
crontab的日志位置一般位於/var/log/cron,利用下面的語句即可查看日志。
1 |
tail -f /var/log/cron |
上面的/var/log/cron只會記錄是否執行了某些計划的腳本,但是具體執行是否正確以及腳本執行過程中的一些信息linux會通過郵件形式發送到給該用戶。
對於root用戶該郵件記錄位於/var/spool/mail/root,通過以下命令可以查看最近的crontab執行情況。
1 |
tail -f /var/spool/mail/root |
mail郵件一般只會記錄腳本執行成功與否,如果執行失敗,無法給出進一步的錯誤信息,這時需要我們將語句執行的錯誤信息重定向至文件中,這樣可以很方便的查看錯誤信息。下面就給出了一個簡單的例子
1 |
0 6 * * * /root/script/ss.sh >> /root/for_crontab/mylog.log 2>&1 |
上述語句表示把錯誤輸出和標准輸出都輸出到mylog.log中,在執行的時候會將命令執行的相關信息記錄至mylog.log文件中。