crontab定时任务不执行的原因
我在网上找的时候发现网上主要说了这5个原因:
1 crond服务未启动
crontab不是Linux内核的功能,而是依赖一个crond服务,这个服务可以启动当然也可以停止。如果停止了就无法执行任何定时任务了,解决的方法是打开它:
crond
或
service crond start
如果提示crond命令不存在,可能被误删除了,CentOS下可以通过这个命令重新安装:
yum -y install crontabs
2 权限问题
比如:脚本没有x执行权限,解决方法:
增加执行权限,或者用bash abc.sh的方法执行
也有可能crontab任务所属的用户对某个目录没有写权限,也会失败
3 路径问题
有的命令在shell中执行正常,但是在crontab执行却总是失败。有可能是因为crontab使用的sh未正确识别路径,比如:以root身份登录shell后执行一个/root/test.sh,只要执行
./test.sh
就可以了。但是在crontab中,就会找不到这个脚本,比如写完整:
/root/test.sh
4 时差问题
因为服务器与客户端时差问题,所以crontab的时间以服务器时间为准。
时差这个问题还真是搞人,这个我亲身体验了,现象如下:
(1) 我设置了一个定时脚本,用date命令观察服务器的时间到了脚本执行的时间点,发现没有执行
(2) 但是我把脚本设置成每分钟执行一次,就是OK的
见鬼了,服务器时间是对的啊?莫非是要加个什么时区?于是把脚本的时间减10或者12或者8个小时都尝试了下,发现都不行。
但是很明显是时间不一致导致的不执行。
最后用如下两行解决了问题:
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
service crond restart
参考这篇文章: https://www.phpbulo.com/archives/171.html
5 变量问题
有时候命令中含有变量,但crontab执行时却没有,也会造成执行失败。
验证后,我的定时脚本test.sh不执行不是上述任何一种原因,其实我的脚本就一句话:
#!/bin/bash
echo 123 >> testFile
我希望通过这种方式来测试 我设置的定时脚本起作用了,于是我设置了该脚本每分钟执行一次,但是死活在脚本所在目录看不到这个文件,我手动执行
# sh test.sh
却能看到在脚本所在目录能看到这个文件
我怀疑是crontab根本没有执行,于是我在crontab中直接添加了
*/1 * * * * echo 123 >> /home/denglinjie/testFile
testFile文件生成了,说明crontab是执行了的,那看来是我脚本自身存在问题
最后发现,原来是testFile这里必须写完整的路径,我天真的以为testFile会生成在脚本所在的目录,所以改成了如下形式
#!/bin/bash
echo 123 >> /data/denglinjie/testFile
然后就可以了。
其实路径是个非常容易出问题的地方,假设在/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目录。
所以另外一个解决方法就是在执行脚本之前先通过 cd /home/denglinjie 命令进入到脚本所在目录
------------------------------------------------------------------
最近又发现一种新的引起crontab不执行的原因
这里我要执行的是python脚本,我python脚本的目录为:
/data/denglinjie/work/UpdateModuleSwitch
一开始我的定时任务是这样写的:
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是安装在我自己的用户目录下,所以系统找不到这个python,所以只要将我的python也加入到系统PATH环境变量中就可以了
crontab定时任务不执行的原因相关推荐
- CentOS crontab定时任务不执行的解决
crontab 配置文件 SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # .- minute (0 59 ...
- linux怎么查看定时任务有没有运行,怎么看crontab定时任务是否执行
定时执行操作命令,每一个用户拥有自己的crontab,那么大家知道怎么看crontab定时任务是否执行呢?接下来大家跟着学习啦小编一起来了解一下的看crontab定时任务是否执行解决方法吧. 看cro ...
- crontab定时任务不执行,并且没有收到错误信息邮件
现象: crontab中定义的msqldump定时任务不能执行,没有收到错误信息邮件,查看日志/var/log/cron显示如下 CROND[15777]: (root) MAIL (mailed 3 ...
- Linux crontab 定时任务没执行,没收到错误信息邮件
crond 定时任务 没执行,简单的打印日期,reboot 命令 等也没执行成功(语法确保没错).捣鼓一整算是有些进展. centos7 不过这个好像没啥问题吧.. 分割线-------------- ...
- crontab 不能执行的原因
最近经常碰到关于crontab不能执行的,初步总结了有以下几个原因: 第一,脚本的原因:大多数情况下,我们要相信科学,相信计算机,不是有鬼,就是我们的脚本的问题,这种问题导致crontab不能执行的概 ...
- 【linux】记录一次crontab定时任务+ lsof 无法正常执行的问题
前言 书接上文: https://blog.csdn.net/Mrerlou/article/details/120306748 最近要实现使用脚本统计 Presto进程打开的文件描述符并向open- ...
- crontab mysql 不执行_crontab定时任务不执行
系统是centos,发现crontab定时任务不执行 登录系统用手工执行脚本就可以 其它如crontab配置文件没有对用户做限制, 脚本权限也赋予执行,用root账户执行,但是最后还是不行, 请各位大 ...
- 【Linux】crontab 定时任务 遇到几个问题
文章目录 cron 与 crontab 区别 bash xxx.sh 可以执行,但是crontab定时任务不执行,也没有报错信息,无日志: 首先区分 crontab -e 和 /etc/crontab ...
- _CentOS「linux」学习笔记11:crontab定时任务常用参数和基本语法
linux基础操作:主要介绍了crontab定时任务的常用参数和基本语法 crontab[定时任务,重复执行特定的命令或脚本,类似Windows下的计划任务] crontab常用参数和基本语法介绍: ...
最新文章
- C++ 笔记(35)— std::to_string 转换整形数字为字符串
- Mysql5.7数据导出提示--secure-file-priv选项问题的解决方法
- Java算法测试的输入模板
- [Android]生成heap dump文件(.hprof)
- 动手理解Vue导航守卫
- 【建议收藏】数据中心服务器基础知识大全
- 技能类别mysql_MySQL 数据类型
- CSS3+JS实现静态圆形进度条【清晰、易懂】
- free 显示系统内存的使用情况
- 详解如何运用技术手段查处公车私用和超速行驶
- 卡巴斯基终于也免费了:功能太鸡肋
- Fluent 全流程求解多孔介质算例
- windows无法完成系统配置。若要尝试恢复配置,请重新启动计算机。出现此情况怎么处理,Win7封装Windows无法完成系统配置解决方案...
- 移动端 touch 手机拖动 css停止问题
- 【福利帖】当我谈学习视觉时,我谈些什么
- linux中利用k键杀死进程号,linux下杀死进程的若干方法
- 第一件 免费杀毒软件下载
- 从easyui页面导出excel
- 程序员的悲哀--动车追尾
- 我发现凡是给offer的公司,面试时基本不问技术细节,那些问得又多又细的公司,后面就没下文了!