crontab定时任务不执行的原因
2018-06-26 16:52 Loull 阅读(3873) 评论(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:
- # systemctl restart rsyslog.service
CentOS 6:
- # 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. 路径问题
相对路径会找不到文件,要使用绝对路径。