极品分享

CentOS crontab 定时任务不执行的常见解决方法

crontab 配置文件

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

HOME=/

# .—————- 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 help

Usage: /etc/init.d/crond {start|stop|status|restart|condrestart|try-restart|reload|force-reload}


crond 加入到开机启动


chkconfig --level 2345 crond on


 


crontab定时任务不执行问题


排查原因步骤如下:


首先,确认服务器是否开启定时任务计划服务,只有root用户才能对crond服务进行开启和关闭


[root@mimvp-bj script]# service crond status

crond is stopped

[root@mimvp-bj script]# service crond start

Starting crond:                                            [  OK  ]

[root@mimvp-bj script]# service crond status

crond (pid  24577) is running…


 


请确保crond状态为 is running… 


如果crond状态为 crond is stopped ,则定时任务服务不会生效故无法执行,我遇到的crontab不执行就是这个原因


 


crontab 常见错误的几个问题


编辑 crontab :

crontab -e


(指定bash是非常有效的解决方式,我今天碰到这个问题,死活执行不起来,后台调试过程中添加了这一句就解决了)


# minute hour  day month week   command

SHELL=/bin/bash

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


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


输入查看命令:


crontab -l


# m h  dom mon dow   command

SHELL=/bin/bash

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


 


如果遇到shell语法错误


解决方法:


需指定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(推荐用此方式)


先进入该目录,然后在执行脚本;否则,执行脚本中的其它脚本都需要加绝对路径





一些示例:


00 8,12,16 * * * /data/app/scripts/monitor/df.sh


30 2 * * * /data/app/scripts/hotbackup/hot_database_backup.sh


10 8,12,16 * * * /data/app/scripts/monitor/check_ind_unusable.sh


10 8,12,16 * * * /data/app/scripts/monitor/check_maxfilesize.sh


10 8,12,16 * * * /data/app/scripts/monitor/check_objectsize.sh


 


43 21 * * * 21:43 执行


15 05 * * *    05:15 执行


0 17 * * * 17:00 执行


0 17 * * 1 每周一的 17:00 执行


0,10 17 * * 0,2,3 每周日,周二,周三的 17:00和 17:10 执行


0-10 17 1 * * 毎月1日从 17:00到7:10 毎隔1分钟 执行


0 0 1,15 * 1 毎月1日和 15日和 一日的 0:00 执行


42 4 1 * *     毎月1日的 4:42分 执行


0 21 * * 1-6   周一到周六 21:00 执行


0,10,20,30,40,50 * * * * 每隔10分 执行


*/10 * * * *        每隔10分 执行


* 1 * * *         从1:0到1:59 每隔1分钟 执行


0 1 * * *         1:00 执行


0 */1 * * *        毎时0分 每隔1小时 执行


0 * * * *         毎时0分 每隔1小时 执行


2 8-20/3 * * *      8:02,11:02,14:02,17:02,20:02 执行


30 5 1,15 * *       1日 和 15日的 5:30 执行


 


 


2.3  & 后台执行命令


 


       当在前台运行某个作业时,终端被该作业占据;而在后台运行作业时,它不会占据终端。可以使用&命令把作业放到后台执行。


 


       如:


       30 2 * * * /data/app/scripts/hotbackup/hot_database_backup.sh &


 


       在后台运行作业时要当心:需要用户交互的命令不要放在后台执行,因为这样你的机器就会在那里傻等。


       不过,作业在后台运行一样会将结果输出到屏幕上,干扰你的工作。如果放在后台运行的作业会产生大量的输出,最好使用下面的方法把它的输出重定向到某个文件中:


       如:


              command >out.file 2>&1 &


 


       在这个例子中,2>&1表示所有的标准输出和错误输出都将被重定向到一个叫做out.file 的文件中。





crontab不执行的原因解析

Posted by 破冰 on 2013-8-25 13:40 Sunday

1.Cron的启动与关闭


由于Cron是Linux的内置服务,可以用以下的方法启动.关闭这个服务:


/sbin/service crond start           //启动服务

/sbin/service crond stop            //关闭服务

/sbin/service crond restart        //重启服务

/sbin/service crond reload         //重新载入配置


2.Cron配置文件


2.1全局配置文件


crontab在/etc目录下面存在cron.hourly,cron.daily,cron.weekly,cron.monthly,cron.d五个目录和crontab,cron.deny二个文件.


cron.daily是每天执行一次的job,cron.weekly是每个星期执行一次的job.cron.monthly是每月执行一次的job,cron.hourly是每个小时执行一次的job.cron.d是系统自动定期需要做的任务,但是又不是按小时,按天,按星期,按月来执行的,那么就放在这个目录下面.


/etc/crontab文件一般如下:


01 * * * * root run-parts /etc/cron.hourly

02 4 * * * root run-parts /etc/cron.daily

22 4 * * 0 root run-parts /etc/cron.weekly

42 4 1 * * root run-parts /etc/cron.monthly


我们可在此文件中添加自己需要的cron job.


/etc/cron.deny文件就是用于控制不让哪些用户使用Crontab的功能.


2.2用户配置文件


每个用户都有自己的cron配置文件,通过crontab -e 就可以编辑,一般情况下我们编辑好用户的cron配置文件保存退出后,系统会自动就存放于/var/spool/cron/目录中,文件以用户名命名.


linux的cron服务是每隔一分钟去读取一次/var/spool/cron,/etc/crontab,/etc/cron.d下面所有的内容.


3.Cron命令格式


crontab [ -u user ] 文件 

crontab [ -u user ] { -l | -r | -e }


-u:指定某一用户


-e:执行文字编辑器来设定用户(当前用户或指定用户)时程表,内定的文字编辑器是vi.

-r:删除用户时程表.

-l:列出用户时程表.


4.Cron文件格式


*  *  *  *  *  command

分 时 日 月 周   命令


第1列表示分钟1~59, 每分钟用*或者 */1表示

第2列表示小时1~23(0表示0点)

第3列表示日期1~31

第4列表示月份1~12

第5列标识号星期0~6(0表示星期天)

第6列要运行的命令


5.Cron文件使用说明


5.1 一般情况


当f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其余类推. 


* * * * * /bin/usershell  每天每分钟执行一次/bin/usershell

当f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其余类推.


0-12 * * * * /bin/usershell  每天每小时从0到12分钟每分钟执行一次/bin/usershell

当f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其余类推.


* */2 * * * /bin/usershell  每天每2小时执行一次/bin/usershell

当f1 为 a, b, c,... 时表示第 a, b, c,... 分钟要执行,f2 为 a, b, c,... 时表示第 a, b, c...个小时要执行,其余类推.


* 1,3,5,7 * * * /bin/usershell  每天每逢1,3,4,7点执行一次/bin/usershell


5.2. 冲突逻辑


日期可以用月限定,也可以用“星期”指定,如果两个段有冲突,那么,第六段的命令将在匹配任何一个的情况下都运行,比如


"30 4 1,15 * 5",将在每月的1号和15号加每个周五,上午4:30运行.


5.3. 符号"%"


"%"在Cron文件中,有"结束命令行","换行","重定向"的作用,假如不需要"%"的特殊作用,需要使用转义符转义.


5.4. @reboot


这个不需要理解,为了达到在开机后运行,且只运行一次的目的.除了这个,也无法通过前五段的设置来实现.


@annually也是这个功能.


至于@yearly,@monthly等等其实都可以用上面的五段来设置.

--------------------- 

作者:Brad_Chen 

来源:CSDN 

原文:https://blog.csdn.net/brad_chen/article/details/50318297 

版权声明:本文为博主原创文章,转载请附上博文链接!


2018-10-23 0 /
Linux
/
标签: 

评论回复

回到顶部