天天看点

Linux定时任务不执行排查方法

实现linux定时任务有:cron、anacron、at等,但平常工作中接触到的是cron服务。cron是服务名称,crond是后台进程,crontab则是定制好的计划任务表。项目中经常用到定时任务实现某些功能,最近遇到定时任务不执行的情况,由于之前对这个不太了解,费时费力,最后总算找到问题所在。因此想跟大家分享一下排查方法,以后少走弯路。

1.查看crond服务是否执行。

通过命令pgrep crond或/sbin/service crond status可查看到crond的进程pid,可以确定crond服务是否在运行。

2. 查看cron服务是否起作用:

使用命令sudo tail –f /var/log/cron

只要在这个log里面出现命令就说明执行了。走到这一步的时候,我发现log里边并没有执行的记录,那说明我的定时任务并没有执行。

3. 那么接下来就要排查为什么没有执行,大概有以下几种情况:

(1)脚本:脚本问题导致crontab不执行的概率是很高的,也是最为常见的,那没办法,只能查看脚本。可以将脚本手动执行下,看是否报错,若报错就检查脚本;

手动执行成功,排查是否为环境变量导致crontab执行失败。任务的执行环境为当前用户或指定用户的执行环境,所以,编码时,尽量通过全路径名引用文件或调用命令,或者将引用的文件或者命令的路径添加到环境变量中。

(2)系统时间不同,也会导致定时任务不执行,此时你就要查看系统时间

Date(查看)

Date –s mm/dd/yy (更改系统时间)

(3)crontab 守护进程死掉了,重启该进程;

service crond restart

(4)脚本编码有问题;

脚本在window下编写,传到linux下后报“锘?!/bin/bash”,用vi编辑器新建新shell脚本,输入内容后保存。

(5)查看脚本是否有可执行权限。必须保证执行脚本的用户有执行改文件的权限。

继续阅读