crontab定时任务不执行的一些原因总结

  

  

最近在工作中遇到了一些问题,crontab定时任务居然不执行,后来我在网上找的时候发现网上主要说了这5个原因:

  

  

crontab不是Linux内核的功能,而是依赖一个crond服务,这个服务可以启动当然也可以停止。如果停止了就无法执行任何定时任务了,解决的方法是打开它:

        crond      

        服务crond开始      

如果提示crond命令不存在,可能被误删除了,CentOS下可以通过这个命令重新安装:

        百胜是安装crontab中      

  

比如:脚本没有x执行权限,解决方法:

  

增加执行权限,或者用bash abc.sh的方法执行

  

也有可能crontab任务所属的用户对某个目录没有写权限,也会失败

  

  

有的命令在shell中执行正常,但是在crontab执行却总是失败。有可能是因为crontab使用的sh未正确识别路径,比如:以根身份登录壳后执行一个/根/test.sh,只要执行

        。/test.sh      

就可以了。但是在crontab中,就会找不到这个脚本,比如写完整:

     /root/test.sh      

  

因为服务器与客户端时差问题,所以crontab的时间以服务器时间为准。

  

时差这个问题还真是搞人,这个我亲身体验了,现象如下:

  

(1)我设置了一个定时脚本,用日期命令观察服务器的时间到了脚本执行的时间点,发现没有执行

  

(2)但是我把脚本设置成每分钟执行一次,就是OK的

  

见鬼了,服务器时间是对的啊?莫非是要加个什么时区?于是把脚本的时间减10或12者或者8个小时都尝试了下,发现都不行。

  

但是很明显是时间不一致导致的不执行。

  

最后用如下两行解决了问题:

        cp/usr/share/zoneinfo/Asia/Shanghai/etc/localtime   服务crond重启      

参考这篇文章:https://www.jb51.net/article/154296.htm

,   

  

有时候命令中含有变量,但crontab执行时却没有,也会造成执行失败。

  

验证后,我的定时脚本test.sh不执行不是上述任何一种原因,其实我的脚本就一句话:

        # !/bin/bash   回声123祝辞祝辞之前测试文件      

我希望通过这种方式来测试我设置的定时脚本起作用了,于是我设置了该脚本每分钟执行一次,但是死活在脚本所在目录看不到这个文件,我手动执行

        # sh test.sh      

却能看到在脚本所在目录能看到这个文件

  

我怀疑是crontab根本没有执行,于是我在crontab中直接添加了

        */1 * * * * 123(回声)在祝辞/home/denglinjie/testFile      

测试文件文件生成了,说明crontab是执行了的,那看来是我脚本自身存在问题

  

最后发现,原来是测试文件这里必须写完整的路径,我天真的以为测试文件会生成在脚本所在的目录,所以改成了如下形式

        # !/bin/bash   回声123祝辞祝辞/数据/denglinjie/测试文件      

然后就可以了。

  

其实路径是个非常容易出问题的地方,假设在/home/denglinjie目录下有一个脚本文件test1.sh,然后在该目录下还有一个脚本文件test2.sh

  

在test1.sh中执行了test2.sh,而且用的是相对路径,即相对test1.sh所在的路径。

  

如果在crontab - e中编辑的时候,执行的方式是

  

sh/home/denglinjie/test1.sh,当执行到调用sh test2.sh的时候,系统会认为是从crontab文件所在的目录去找test2.sh,但是其实是找不到的,造成执行失败

  

最开始我想的方法是,我要将我写的待执行的脚本文件以及被调用的其他的脚本和crontab文件放到一个地方,这样就可以拉,但是失败了,可能是因为权限问题,我进不去/var/spool/cron目录。

  

所以另外一个解决方法就是在执行脚本之前先通过光盘,/home/denglinjie命令进入到脚本所在目录

  

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

  

  

这里我要执行的是python脚本,我python脚本的目录为:

     /数据/denglinjie/工作/UpdateModuleSwitch

crontab定时任务不执行的一些原因总结