![为什么 cron 会“跳过”预定的作业](https://linux22.com/image/4431/%E4%B8%BA%E4%BB%80%E4%B9%88%20cron%20%E4%BC%9A%E2%80%9C%E8%B7%B3%E8%BF%87%E2%80%9D%E9%A2%84%E5%AE%9A%E7%9A%84%E4%BD%9C%E4%B8%9A.png)
我的服务器上有 3 个任务被安排到 crontab,但我的第二个任务不会自动运行
\# m h dom mon dow command
*/5 * * * * ~/dbCron.sh
00 09 * * * ~/dbCron_daily_backup.sh <--------- this is skipping
55 23 * * * ~/backup_logs.sh && ~/clear_logs.sh
那么什么是能够在适当的时间运行任务而不会失败的解决方案呢?
答案1
您的脚本正在运行,但失败了。请使用脚本的绝对路径(例如“/home/yourid/bin/dbCron_daily_backup.sh”),并编辑/修改脚本以对所有命令使用绝对路径。您可能遇到环境问题,可以通过在脚本顶部获取适当的环境配置来解决。
帮自己一个忙,创建一个日志目录,这样你就可以观察/监控你的 cronjob 行为,
mkdir /home/yourid/log/
这是一个可以用来记录 crontab 行为的习惯用法(假设您有一个地方可以记录您的工作);这将捕获标准输出和标准错误,
#periodic db work,
*/5 * * * * (cd /home/yourid/; bin/dbCron.sh) 2>&1 >> /home/yourid/log/dbcron.log
#db daily backup
00 09 * * * (cd /home/yourid; bin/dbCron_daily_backup.sh) 2>&1 >> /home/yourid/log/dbdailybackup.log
#db nightly cleanup
55 23 * * * (cd /home/yourid/; bin/backup_logs.sh && bin/clear_logs.sh) 2>&1 >> /home/yourid/log/dbnightlycleanup.log
#log system health,
0 * * * * (cd /opt/myapp/;util/DiskCheck.pl) 2>&1 >> /home/yourid/log/health.log
您可能希望在脚本的开头和结尾打印出带有日期/时间的消息,以便您可以记录进度,例如,
#!/bin/bash
echo "begin $0 " `/bin/date +%y%m%d%H%M%S`
echo do stuff
echo "done $0 " `/bin/date +%y%m%d%H%M%S`