我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

前言

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

1 crond服务未启动

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


crond


service crond start

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


yum -y install crontabs

2 权限问题

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

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

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

3 路径问题

有的命令在shell中执行正常,但是在crontab执行却总是失败。有可能是因为crontab使用的sh未正确识PPuUVZ别路径,比如:以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.jb51.net/article/154296.htm

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环境变量中就可以了

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

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

前言 最近在工作中遇到了一些问题,crontab定时任务居然不执行,后来我在网上找的时候发现网上主要说了这5个原因: 1 crond服务未启动 crontab不是linux内核的功能,而是依赖一个crond服务,这个服务可以启动当然也可以停
2022-06-04

Linux中crontab定时任务不执行的原因

最近在linux中遇到了个crontab定时任务不执行的case,在这给大家分享一下,避免踩到我遇到的坑。先贴脚本吧 为了方便展示,把脚本入参,都写死了#!/usr/bin/env bash # 1输出文件,到log 例如: bg # 2
2022-06-04

crontab定时任务不执行的原因分析与解决方法

前言 实现linux定时任务有:cron、anacron、at等,cron是服务名称,crond是后台进程,crontab则是定制好的计划任务表 然而今天真是长知识 用了 crontab 这么久 才知道原来也需要 启动添加了定时任务 但是并
2022-06-04

linux定时任务不执行的原因有哪些

任务的执行时间设置错误:可能是任务的执行时间设置不正确,导致任务没有按照预期执行。可以通过检查任务的时间设置来解决该问题。任务的执行路径不正确:如果任务的执行路径不正确,Linux 定时任务将无法找到需要执行的脚本或程序,导致任务无法执行。
2023-10-23

spring定时任务没有执行的原因有哪些

1. 配置错误:可能是由于配置文件中的定时任务配置错误,导致定时任务无法正确识别和执行。2. 依赖错误:如果定时任务依赖的某个组件或类库没有正确引入或配置,可能会导致定时任务无法执行。3. 线程池问题:如果线程池的线程数设置过小,或者线程池
2023-08-24

linux定时任务crontab 实现每秒执行一次的方法

linux crontab 命令,最小的执行时间是一分钟。如需pTfIaRS要在小于一分钟内重复执行,可以有两个方法实现。 Cron 各项的描述 以下是 crontab 文件的格式:{minute} {hour} {day-of-month
2022-06-04

linux定时任务crontab如何实现每秒执行一次的方法

这篇文章给大家分享的是有关linux定时任务crontab如何实现每秒执行一次的方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。linux crontab 命令,最小的执行时间是一分钟。如需要在小于一分钟内重复
2023-06-09

解决定时任务@Scheduled没有准时执行的原因及分析

这篇文章主要介绍了解决定时任务@Scheduled没有准时执行的原因及分析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-05-17

编程热搜

目录