学而实习之 不亦乐乎

Linux:crontab 定时任务执行失败的常见问题

2022-04-23 23:14:34

在工作中经常会遇到 crontab 定时任务不执行或者失败的情况,其实常见的问题有以下几个原因:

1、crond服务未启动

crontab 不是 Linux 内核的功能,而是依赖于 crond 服务,这个服务可以启动也可以停止。如果停止了就无法执行任何定时任务了。

# crond
或
# service crond start
或
# systemctl start crond.service

2、权限问题

如果脚本没有可执行权限,或者对某些文件没有相应的权限,就需要增加用户相应的权限。

3、路径问题

有的命令在shell中执行正常,但是在crontab执行却总是失败。有可能是因为crontab使用的sh未正确识别路径,此时要确保路径是正确的。

尤其是在要执行的脚本中,要特别注意这方面的问题,有时候我们会希望在当前目录下调用或者访问文件,但在 crontab 中执行时,会从 crontab 文件所在的目录去查找相应的文件,可能是找不到的。所以在脚本中尽量不要用相对路径这种的,要用完整的路径,当然也可以通过 cd 命令进入到脚本所在目录即可。

4、时差问题

因为服务器与客户端时差问题,所以crontab的时间以服务器时间为准,此时需要修改时间或者时区。

比如设置成每分钟执行没有问题,而设置成时间点却不行,那就看一下服务器的时间是否与本地是一致的。

5、环境变量问题

比如我要执行的是 python 脚本,但 python 命令并未加入到服务器环境变量中去或者python 默认的版本不对,此时需要写完整的 python 命令的路径。否则会提示找不到 python 命令。当然,最好还是把 python 命令加入到环境变量中。