crontab定时任务不执行的一些原因,你知道吗?

WBOY
发布: 2024-03-09 09:49:15
转载
1112 人浏览过

crontab定时任务不执行的一些缘由总结

更新时间:2019年01月09日09:34:57作者:田野上的希望

这篇文章主要给你们总结介绍了关于crontab定时任务不执行的一些缘由,对每种可能发生的诱因都给出了解决方式,对遇见这个问题的同事们具有一定的参考学习价值,须要的同学们下边随着小编来一起学习学习吧

序言

近来在工作中遇见了一些问题,crontab定时任务竟然不执行,后来我在网上找的时侯发觉网上主要说了这5个诱因:

1crond服务未启动

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

crond
登录后复制

service crond start
登录后复制

假如提示crond命令不存在,可能被删掉不仅,CentOS下可以通过这个命令重新安装:

yum -y install crontabs
登录后复制

2权限问题

例如:脚本没有x执行权限,解决方式:

降低执行权限,或则用bashabc.sh的方式执行

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

3路径问题

有的命令在shell中执行正常,然而在crontab执行却总是失败。有可能是由于crontab使用的sh未正确辨识路径,例如:以root身分登入shell后执行一个/root/test.sh,只要执行

./test.sh
登录后复制

就可以了。并且在crontab中,都会找不到这个脚本,例如写完整:

/root/test.sh
登录后复制

4时差问题

linux任务计划_linux 计划任务没执行_linux任务计划不生效

由于服务器与顾客端时差问题linux是什么,所以crontab的时间以服务器时间为准。

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

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

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

见鬼了,服务器时间是对的啊?难道是要加个哪些时区?于是把脚本的时间减10或则12或则8个小时都尝试了下,发觉都不行。

然而很显著是时间不一致引起的不执行。

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

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime service crond restart
登录后复制

参考这篇文章:

5变量问题

有时侯命令中富含变量,但crontab执行时却没有,也会导致执行失败。

验证后,我的定时脚本test.sh不执行不是上述任何一种缘由,虽然我的脚本就一句话:

#!/bin/bash echo 123 >> testFile
登录后复制

我希望通过这些方法来测试我设置的定时脚本起作用了,于是我设置了该脚本每分钟执行一次,而且死活在脚本所在目录看不到这个文件linux 计划任务没执行,我自动执行

# sh test.sh
登录后复制

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

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

*/1 * * * * echo 123 >> /home/denglinjie/testFile
登录后复制

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

最后发觉,原先是testFile这儿必须写完整的路径,我天真的以为testFile会生成在脚本所在的目录,所以改成了如下方式

#!/bin/bash echo 123 >> /data/denglinjie/testFile
登录后复制

之后就可以了。

linux任务计划_linux 计划任务没执行_linux任务计划不生效

虽然路径是个十分容易出问题的地方,假定在/home/denglinjie目录下有一个脚本文件test1.sh,之后在该目录下还有一个脚本文件test2.sh

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

若果在crontab-e中编辑的时侯,执行的方法是

sh/home/denglinjie/test1.sh,当执行到调用shtest2.sh的时侯,系统会觉得是从crontab文件所在的目录去找test2.sharm linux,而且显然是找不到的,导致执行失败

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

所以另外一个解决方式就是在执行脚本之前先通过cd/home/denglinjie命令步入到脚本所在目录

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

近来又发觉一种新的导致crontab不执行的诱因

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

/data/denglinjie/work/UpdateModuleSwitch
登录后复制

一开始我的定时任务是这样写的:

linux任务计划_linux任务计划不生效_linux 计划任务没执行

0 * * * * cd /data/denglinjie/work/UpdateModuleSwitch;python update_switch.py
登录后复制

发觉到了时间点竟然没有执行,其中update_switch.py的部份内容如下:

import pymongo
登录后复制

就是我的脚本中引入了自己安装的pymongo,注意,这个pymongo是安装到了指定的python版本上的

不执行缘由:crontab定时任务执行的时侯,使用的python不是我的那种python,使用的这个python没有安装pymongo,致使import失败

解决办法,改成如下方式:

0 * * * * cd /data/denglinjie/work/UpdateModuleSwitch;/data/zhoumi/install_evn/bin/python update_switch.py
登录后复制

指定运行使用的python,这个python早已安装绑定了pymongo,或则用如下方式:

0 * * * * export PATH=/data/zhoumi/install_evn/bin/:$PATH;cd /data/denglinjie/work/UpdateModuleSwitch;python update_switch.py
登录后复制

由于我的这个python是安装在我自己的用户目录下linux 计划任务没执行,所以系统找不到这个python,所以只要将我的python也加入到系统PATH环境变量中就可以了

总结

以上就是这篇文章的全部内容了,希望本文的内容对你们的学习或则工作具有一定的参考学习价值,假如有疑惑你们可以留言交流,感谢你们对本站的支持。

以上是crontab定时任务不执行的一些原因,你知道吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:itcool.net
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!