• 为了保证你在浏览本网站时有着更好的体验,建议使用类似Chrome、Firefox之类的浏览器~~
    • 如果你喜欢本站的内容何不Ctrl+D收藏一下呢,与大家一起分享各种编程知识~
    • 本网站研究机器学习、计算机视觉、模式识别~当然不局限于此,生命在于折腾,何不年轻时多折腾一下

crontab定时任务失效原因

Linux admin 3年前 (2016-11-10) 5100次浏览 0个评论 扫描二维码

1、脚本语法错误

在 crontab 脚本没有定时执行的时候,首先需要检查脚本的语法有没有出现问题。

2、环境变量问题

有时我们创建了一个 crontab,但是这个任务却无法自动执行,而手动执行这个任务却没有问题,这种情况一般是由于在 crontab 文件中没有配置环境变量引起的。我们在手动执行任务时是在当前 shell 环境下进行的,程序能够找到环境变量,而系统自动执行任务调度时,是不会加载任何环境变量的。因此,我们需要在 shelll 脚本中提供所有必要的路径和环境变量。

需要注意的主要有以下三点:

1)脚本中涉及文件路径时写全局路径;

2)脚本执行要用到 java 或其他环境变量时,通过 source 命令引入环境变量,如:

1
2
3
4
5
cat start_cbp.sh
#!/bin/sh
source /etc/profile
export RUN_CONF=/home/d139/conf/platform/cbp/cbp_jboss.conf
/usr/local/jboss-4.0.5/bin/run.sh -c mev &

3)当手动执行脚本 OK,但是 crontab 死活不执行时。这时必须大胆怀疑是环境变量惹的祸,并可以尝试在 crontab 中直接引入环境变量解决问题。如:

1
0 * * * * . /etc/profile;/bin/sh /var/www/java/audit_no_count/bin/restart_audit.sh

3、系统任务调度及用户任务调度

系统任务调度主要完成系统的一些维护操作,用户任务调度主要完成用户自定义的一些任务,可以将用户任务调度放到系统任务调度来完成(不建议这么做),但是反过来却不行,root 用户的任务调度操作可以通过“crontab –uroot –e”来设置,也可以将调度任务直接写入/etc/crontab 文件,需要注意的是,如果要定义一个定时重启系统的任务,就必须将任务放到/etc/crontab 文件,即使在 root 用户下创建一个定时重启系统的任务也是无效的。

crontab 定时任务不执行的解决办法

1、查看 crontab 执行记录

如果出现了 crontab 定时任务不执行的情况,首先需要定位问题,那么就需要通过日志来确定问题所在。

crontab 的日志位置一般位于/var/log/cron,利用下面的语句即可查看日志。

1
tail -f /var/log/cron

上面的/var/log/cron 只会记录是否执行了某些计划的脚本,但是具体执行是否正确以及脚本执行过程中的一些信息 linux 会通过邮件形式发送到给该用户。
对于 root 用户该邮件记录位于/var/spool/mail/root,通过以下命令可以查看最近的 crontab 执行情况。

1
tail -f /var/spool/mail/root

mail 邮件一般只会记录脚本执行成功与否,如果执行失败,无法给出进一步的错误信息,这时需要我们将语句执行的错误信息重定向至文件中,这样可以很方便的查看错误信息。下面就给出了一个简单的例子

1
0 6 * * * /root/script/ss.sh >> /root/for_crontab/mylog.log 2>&1

上述语句表示把错误输出和标准输出都输出到 mylog.log 中,在执行的时候会将命令执行的相关信息记录至 mylog.log 文件中。

2、解决问题

在经过上一步的问题定位之后,就可以很容易找到问题并解决。。


Deeplearn, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明crontab 定时任务失效原因
喜欢 (1)
admin
关于作者:
互联网行业码农一枚/业余铲屎官/数码影音爱好者/二次元

您必须 登录 才能发表评论!