为什么 cron 会“跳过”预定的作业

为什么 cron 会“跳过”预定的作业

我的服务器上有 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`

相关内容