我对 cron 相当陌生,我试图找到一种方法来运行一周中的每一天的工作,除了每个月的第一天和每周的第一天。
这可能听起来有点奇怪,但上下文是这是用于备份任务的。我想每天备份,但也希望将一些备份保留更长的时间,因此每周备份一次,每月备份一次。
我想为日常工作设置一个 cron 任务,但我正在努力了解如果在每周或每月备份也将运行的一天,如何有效地不运行日常任务。我认为我可以通过为每月的每一天添加一个单独的 cron 任务来实现这一点,但这感觉不对,因为它有很多单独的任务。
在 cron 中是否有更好的方法来实现这一目标?
答案1
我会用一周中的某天限制来安排工作,然后在实际工作前加上date
“每月某天”的测试。使用您自己的小时和分钟字段值。 “月份中的某一天”字段是*
,表示在该月的任何一天或所有日子运行。 “月份”字段也已打开。 “星期几”字段仅限于星期一到星期六,跳过一周的第一天(假设您将星期日算为一周的第一天)。如果星期一是一周的第一天,请0,2-6
改用“星期几”值。
(minute) (hour) * * 1-6 [ $(date +\%e) -ne 1 ] && actual-job
最简单的方法(限制月份中的某一天和星期几字段)不起作用,因为 中的此注释man 5 crontab
与我的加粗的强调:
注意:命令执行的日期可以在以下两个字段中指定 - “月份中的日期”和“星期几”。如果两个字段都受到限制(即不包含“*”字符),则该命令将在以下情况下运行任何一个字段与当前时间匹配。例如,