最近我写了一个简单的小脚本来将目录备份到 S3。我的目标是运行每日、每周和每月备份,这些备份根据 S3 中的频率有不同的保留规则。
一切都运行良好,只有一点例外。我的每周 cron 作业每天都会运行。这是 crontab:
0 3 1 * * /usr/s3_sync_dir /dropbox MONTHLY
0 2 2-31 * THU /usr/s3_sync_dir /dropbox WEEKLY
0 3 2-31 * * /usr/s3_sync_dir /dropbox DAILY
因此,MONTHLY 作业在每月 1 号凌晨 3 点运行。WEEKLY 作业应在周四凌晨 2 点运行(如果不是 1 号)。DAILY 作业在除 1 号以外的每一天运行。这在线验证器确认《每周新闻》应该每周四运行。
有人想过为什么我的每周工作每天早上都要运行吗?
这是在 Ubuntu 16.04.2 LTS 上。
答案1
来自手册(man 5 crontab)
注意:命令执行的日期可以通过两个字段指定 - 月份日期和星期几。如果两个字段都受到限制(即不是 *),则当任一字段与当前时间匹配时,将运行命令。例如,“30 4 1,15 * 5”将导致命令在每个月 1 日和 15 日
以及每个星期五的凌晨 4:30 运行。但是,可以通过向命令添加测试来实现所需的结果(请参阅下面的示例 CRON 文件中的最后一个示例)。
我想你应该把 2-31 变成 *
或者
您可以使用@daily、@weekly 和@monthly。
或者
您可以在 /etc/cron.daily、/etc/cron.weekly、/etc/cron.monthly 中链接到您的脚本。