您的位置:首页 > 运维架构 > Linux

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

2015-12-15 17:36 627 查看
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/atrunminute(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 --level 2345 crond on 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(指定bash是非常有效的解决方式,我今天碰到这个问题,死活执行不起来,后台调试过程中添加了这一句就解决了)# minute hour  day month week   commandSHELL=/bin/bash30 * * * * cd /home/barry/top800/top10/top10_fruits/ && ./top10_all.shCtrl + 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语法错误
解决方法:需指定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.sh30 2 * * * /data/app/scripts/hotbackup/hot_database_backup.sh10 8,12,16 * * * /data/app/scripts/monitor/check_ind_unusable.sh10 8,12,16 * * * /data/app/scripts/monitor/check_maxfilesize.sh10 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  & 后台执行命令        当在前台运行某个作业时,终端被该作业占据;而在后台运行作业时,它不会占据终端。可以使用&命令把作业放到后台执行。        如:       302 * * * /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 Sunday1.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.hourly02 4 * * * root run-parts /etc/cron.daily22 4 * * 0 root run-parts /etc/cron.weekly42 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/usershell5.2. 冲突逻辑日期可以用月限定,也可以用“星期”指定,如果两个段有冲突,那么,第六段的命令将在匹配任何一个的情况下都运行,比如"30 4 1,15 * 5",将在每月的1号和15号加每个周五,上午4:30运行.5.3. 符号"%""%"在Cron文件中,有"结束命令行","换行","重定向"的作用,假如不需要"%"的特殊作用,需要使用转义符转义.5.4. @reboot这个不需要理解,为了达到在开机后运行,且只运行一次的目的.除了这个,也无法通过前五段的设置来实现.@annually也是这个功能.至于@yearly,@monthly等等其实都可以用上面的五段来设置.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息