Linux:crontab 定时任务执行失败的常见问题
在工作中经常会遇到 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 命令加入到环境变量中。