crontab失效的原因分析

在linux系统上部署程序,免不了要和crontab定时任务打交到。实际环境中我常遇到crontab失效的问题,在这里总结一下,方便以后查找吧。

1.定时任务语句输入错误
很常见的问题,由于在crontab中没有指定可执行程序的路径而导致定时任务没有执行。有的时候,写完的shell脚本在向crontab文件中添加时忘记先更改可执行权限,也会造成定时任务执行失败。

2.定时任务服务没启动
crontab中任务的执行依托crond这个服务的运行,如果发现定时任务全部停摆,那就先检查下这个服务吧。

3.crontab文件的格式错误
应该不常见的问题,但是我遇到了。某系统集成商在给我们装系统后我发现定时任务失效,拿vim检查crontab文件后发现其中有些乱码存在,原来这家集成商的人在安装系统之后用windows来编辑了crontab文件,然后再统一放到linux系统下,由于两个系统中换行不同,直接造成了crontab中出现乱码,失效。这倒也好解决,一个dos2unix的命令就可以了。

4.crontab文件的权限出错
有的人图省事,涉及到执行的文件就都设置权限为755。但也不是所有的文件都可以这样随便去设置。
我有一回遇到了crontab失效的问题,检查了语法和格式都没问题,最后在/var/log/cron里面看到bad file mode字样才找到问题的关键:有人把crontab文件权限设置为了755,如果带有可执行权限,crontab就会失效。于是把crontab权限设置为644,问题解决。

最后再说下我对crontab问题的定位方法:

1.在crontab文件最后一行加入一个测试任务,如: * root echo “hello world” >> /root/test_cron 每分钟写一条,很快就能看出是不是crontab中语法的问题。

2.查看日志文件,定时任务的日志文件一般是/var/log/cron,查看下这个文件的最后几行就能知道定时任务是不是完全都停掉了,是不是在执行过程中遇到了什么问题。

评论