每日、每周和每月 Cron 作业

Sta*_*ros 4 cron

最近我写了一个简单的小脚本来备份一个目录到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
Run Code Online (Sandbox Code Playgroud)

因此,MONTHLY 作业在每个月的 1 号凌晨 3 点运行。如果不是第一天,那么每周应该在周四凌晨 2 点运行。而 DAILY 只是每天运行,而不是第一天。这个在线验证器确认WEEKLY 应该每周四运行。

有人想知道为什么我的每周工作每天早上都在运行吗?

这是在 Ubuntu 16.04.2 LTS 上。

小智 5

来自手册(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 中的脚本。