歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> 學習Linux >> 手把手教你crontab排障

手把手教你crontab排障

日期:2017/3/3 17:46:46   编辑:學習Linux

手把手教你crontab排障

手把手教你crontab排障


導讀crond是linux下用來周期性的執行某種任務或等待處理某些事件的一個守護進程,與windows下的計劃任務類似,當安裝完成操作系統後,默認會安裝此服務工具,並且會自動啟動crond進程,crond進程每分鐘會定期檢查是否有要執行的任務,如果有要執行的任務,則自動執行該任務。Linux下的任務調度分為兩類,系統任務調度和用戶任務調度。系統任務調度:系統周期性所要執行的工作,比如寫緩存數據到硬盤、日志清理等。在/etc目錄下有一個crontab文件,這個就是系統任務調度的配置文件。

手把手教你crontab排障手把手教你crontab排障

crontab 配置文件
SHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=rootHOME=/# .—————- minute (0 – 59)# | .————- hour (0 – 23)# | | .———- day of month (1 – 31)# | | | .——- month (1 – 12) OR jan,feb,mar,apr …# | | | | .—- day of week (0 – 6) (Sunday=0 or 7) OR#sun,mon,tue,wed,thu,fri,sat# | | | | |# m h dom mon dow command# * * * * * command will be executed

例如:

*/5 * * * * root /usr/libexec/atrun

minute(m) : 代表一小時內的第幾分,范圍 0-59。
hour (h) : 代表一天中的第幾小時,范圍 0-23。
mday (dom) : 代表一個月中的第幾天,范圍 1-31。
month(mon) : 代表一年中第幾個月,范圍 1-12。
wday (dow) : 代表星期幾,范圍 0-7 (0及7都是星期天)。
who : 要使用什麼身份執行該指令,當您使用 crontab -e 時,不必加此字段。
command(command):所要執行的指令。

crond 開機啟動crond 啟動/關閉腳本
/etc/init.d/crond helpUsage: /etc/init.d/crond {start|stop|status|restart|condrestart|try-restart|reload|force-reload}
crond 加入到開機啟動
chkconfig crond on

crontab定時任務不執行問題

crontab定時任務不執行問題

排查原因步驟如下:

首先,確認服務器是否開啟定時任務計劃服務,只有root用戶才能對crond服務進行開啟和關閉

[root@mimvp-bj script]# service crond statuscrond is stopped[root@mimvp-bj script]# service crond startStarting crond: [ OK ][root@mimvp-bj script]# service crond statuscrond (pid 24577) is running…

請確保crond狀態為 is running…

如果crond狀態為 crond is stopped ,則定時任務服務不會生效故無法執行,我遇到的crontab不執行就是這個原因

crontab 常見錯誤的幾個問題

編輯 crontab :

crontab -e# m h dom mon dow commandSHELL=/bin/bash30 * * * * cd /home/barry/top800/top10/top10_fruits/ && ./top10_all.sh

Ctrl + O (寫入)——》 Enter鍵(保存文件名)——》 Ctrl + X(退出)

輸入查看命令:

crontab -l# m h dom mon dow commandSHELL=/bin/bash30 * * * * cd /home/barry/top800/top10/top10_fruits/ && ./top10_all.sh(推薦用此方式)
如果遇到shell語法錯誤
Syntax error: "(" unexpected

解決方法:

需指定shell解釋器命令:SHELL=/bin/bash(請參見上面 crontab編輯示例 SHELL=/bin/bash)

或者參見: LINUX – BASH Syntax Error

如果遇到路徑錯誤

在 /var/spool/crontab/yanggang 中,添加了如下命令,在日志文件 /var/spool/mail/yanggang 中提示找不到 xxx.sh 路徑

30 * * * * /home/barry/top800/top10/top10_fruits/top10_all.sh

30 * * * * bash /home/barry/top800/top10/top10_fruits/top10_all.sh

這是因為你在crontab中使用了絕對路徑執行腳本 top10_all.sh,因此在腳本 top10_all.sh 中引用的其它腳本也都需要使用絕對路徑,才能被crontab找到並執行。

那麼該如何避免絕對路徑呢,推薦采用如下格式:

30 * * * * cd /home/barry/top800/top10/top10_fruits/ && ./top10_all.sh(推薦用此方式)

先進入該目錄,然後在執行腳本;否則,執行腳本中的其它腳本都需要加絕對路徑

原文來自:http://www.linuxeye.com/Linux/2248.html

本文地址:http://www.linuxprobe.com/crontab-tshoot.html


http://xxxxxx/Linuxjc/1184726.html TechArticle

Copyright © Linux教程網 All Rights Reserved