我在“/etc/crontab”中有一个命令,它每 7 天运行一个数据库程序。现在,我看到这个命令已经被另一个用户评论了两周了。我立即取消了该行的注释,今天我看到这个命令还没有被 crontab 执行。
为什么?我认为重新启动/etc/init.d/cron restart后,crontab会重新启动并看到命令行,它说每7天执行一次命令。那这个程序什么时候启动啊!不是在服务 crond 重新启动时立即启动吗?看来不是。
我现在不能等待 7 天的程序,我希望 crontab 从今晚开始这 7 天。我怎样才能做到这一点?
脚本是:
0 0 */7 * * root source /opt/db_maintain/run.sh
答案1
*/7 并不意味着“从现在起每 7 天一次”。意思是“7的倍数的每一天”。因此,如果 #day modulo 7 == 0 → 该月的第 7、14、21、28 日,它就会运行命令。
Cron 的法语 wiki 页面提供了许多示例: http://fr.wikipedia.org/wiki/Cron#Examples
您可能想使用 Fcron: http://fcron.free.fr/
答案2
今天是星期三。如果您希望 cron 在每周四午夜执行命令,请在 crontab 中输入以下内容:
0 0 * * 4 root /path/to/command
答案3
您还可以安装at
服务/守护程序,它根据时间特征(例如“现在 + 7 天”)来假脱机作业。首先,启动atd
(通过init
脚本systemd
等upstart
)。然后将你的工作排队
at -f /path/to/command now + 7 days
从现在起 7 天后开始,或者
at 2am tomorrow
并阅读明天凌晨 2 点运行的命令。您需要先进行一两次测试,然后等待 7 天才发现它不起作用。尝试now + 1 minutes
让它每 7 天运行一次的一种方法是在批处理前面添加另一个at
命令:
cat >~/bin/weekly-job.sh << AT
at -f ~/bin/weekly-job.sh now + 7 days
~/bin/database-job.sh
AT