Linux 定時任務沒有執行

手動執行腳本正常,定時任務總是不執行解決方案:

  1. 首先檢查crond任務是否正常:service crond status
    重啓下定時任務:service crond stop、service crond start 、service crond restart

  2. 在調度的腳本中加載環境變量試試 腳本中添加 source /etc/profile

crontab -e編輯定時任務時加上./etc/profile; 與在腳本里加 source /etc/profile 效果一樣,例如0 6 * * * ./etc/profile;sh /home/hadoop/ktl_wks/start_1.sh

crontab其實並不知道定時腳本所需要的特殊環境,所以在腳本中要提供所有必要的路徑和環境變量,要注意以下:

  • 腳本中涉及文件路徑時寫全局路徑
  • 腳本執行要用到java或其他環境變量時,通過source命令引入環境變量
  • 當手動執行腳本OK,但是crontab 不執行時。一般都是環境變量惹的禍,可以嘗試在crontab中直接引入環境變量或者在腳本中加載環境變量解決問題
  • 新創建的定時任務,至少要過2分鐘纔可以執行,如果重啓crontab則可以馬上執行。
  • 每條定時任務執行完畢之後,系統會自動將輸出發送郵件給當前系統用戶。日積月累,會給系統造成負擔, 所以每條定時任務命令後面最好進行重定向處理(定時任務執行的結果正常輸出並已經作了一定的處理,,例如追加到某個特定日誌文件): >/dev/null 2>&1 例如 0 8 * * * /home/hadoop/ktl_wks/start_JXC_DD.sh >> /home/hadoop/ktl_wks/start_JXC_DD_run.log 2>&1
  • crontab突然失效時,可以嘗試/etc/init.d/crond restart解決問題。或者查看定時任務日誌看是否有執行報錯:tail -100f /var/log/cron
  • crontab%是有特殊含義的,表示換行的意思。如果要用的話必須進行轉義\%,所以date +%Y%m%dcrontab裏是不會執行的,要換成date +\%Y\%m\%d
  • 命令 crontab -r 會刪除該用戶的所有crontab定時任務。刪除crontab目錄 /var/spool/cron 中用戶的Crontab文件,定時任務就沒有了,所以這個命令危險性很大。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章