定時執行失敗原因分析


、腳本語法錯誤

在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文件中。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM