Linux 系统里面计划任务,crontab 没有如期执行这是运维工作中比较常见的一种故障了。
下面结合最近部署自动脚本不执行问题排查步骤:
1、检查 crontab 服务是否正常
[dmdba@test_db ~]$ ps -aux|grep cron
这里发现服务是正常运行。如果里面没有发现执行记录,那么可以启动下这个服务:service crond start
2、查看用户邮件
其实,最直接最有效的就是查看执行日志了,结合 crontab 执行记录,以及 crontab 执行出错后的系统邮件,一般都能彻底找到失败的原因了!
当然,要记住在 crontab 中如果屏蔽了错误信息,就不会发邮件了。
[dmdba@test_db ~]$ cat /var/spool/mail/dmdba
这里,我发现了脚本执行报错了:
原因还是环境变量问题,找到脚本export加上缺失的环境变量即可。
3、检查脚本的执行权限
一般来说,在 crontab 中建议使用 sh 或 bash 来执行 shell 脚本,避免因脚本文件的执行权限丢失导致任务失败。
当然,最直接检查就是人工直接复制 crontab -l 里面的命令行测试结果。
[dmdba@test_db script]$ crontab -l
0 2 * * * sh /home/dmdba/dmbackup/script/backup.sh
4、检查脚本需要用到的变量
和上文一样,通常来说从 crontab 里面执行的脚本和人工执行的环境变量是不一样的,所以对于一些系统变量,建议写绝对路径,或使用 witch 动态获取,
比如 sudo_bin=$(which sudo) 就能拿到 sudo 在当前系统的绝对路径了。