Linux系统里面计划任务,crontab 没有如期执行这是运维工作中比较常见的一种故障了,根据经验,大家可以从如下角度分析解决:
1、检查crontab服务是否正常
这个一般通过service crond status 查看服务是否启动。如果没有启动,那么可以重启下这个服务:service crond restart
2、检查脚本的执行权限
一般来说,在crontab中建议使用 sh 或 bash 或者/bin/bash来执行shell脚本,避免因脚本文件的执行权限丢失导致任务失败。当然,最直接检查就是人工直接复制crontab -l 里面的命令行测试结果。
3、检查脚本需要用到的变量(这个问题的可能性比较大)
通常来说从crontab里面执行的脚本和人工执行的环境变量是不一样的,所以对于一些系统变量,建议写绝对路径,或使用witch动态获取,比如 mysql_bin=$(which mysql) 就能拿到 sudo在当前系统的绝对路径了。
4、放大招:查看日志
其实,最直接最有效的就是查看执行日志了,结合crontab执行记录,以及crontab执行出错后的系统邮件,一般都能彻底找到失败的原因了!当然,要记住在crontab中如果屏蔽了错误信息,就不会发邮件了。
crontab日志位置在:/var/log/cron 邮件内容文件位置:/var/spool/mail/用户名 ---->(此处查看的是root用户的crontab)