代码改变世界

crontab定时任务不执行的原因

2018-06-26 16:52  Loull  阅读(3828)  评论(0编辑  收藏  举报

查看所有用户下的定时任务:

for u in `cat /etc/passwd | cut -d":" -f1`;do crontab -l -u $u;done

 

查看cron执行的日志记录:

tail /var/log/cron

 

docker容器里cron没生效 或 没有日志

如果没有日志,可能是没有打开rsyslog (centos)

/etc/init.d/rsyslog start

CentOS 7:

  1. # systemctl restart rsyslog.service

CentOS 6:

  1. # service rsyslog restart

 

centos7镜像创建的容器里面安装服务后,可能会启动rsyslog 失败

[root@1a7e1970060a /]# systemctl start sshd
Failed to get D-Bus connection: Operation not permitted 

http://dockone.io/question/729

 

列举5个原因:

1 crond服务未启动

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

crond

service crond start

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

yum -y install crontabs

2 权限问题

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

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

3 路径问题

有的命令在shell中执行正常,但是在crontab执行却总是失败。有可能是因为crontab使用的sh未正确识别路径,比如:以root身份登录shell后执行一个/root/test.sh,只要执行

./test.sh

就可以了。但是在crontab中,就会找不到这个脚本,比如写完整:

/root/test.sh

4 时差问题

因为服务器与客户端时差问题,所以crontab的时间以服务器时间为准。

5 变量问题

有时候命令中含有变量,但crontab执行时却没有,也会造成执行失败。

6. 路径问题

相对路径会找不到文件,要使用绝对路径。