如何在crontab中结合星期几和月份的哪一天?

mit*_*mit 1 linux cron

我想在每个月的第 1 天运行一些作业,在每周的第 1 天运行其他作业,但如果两者发生冲突怎么办?在这种情况下,月份应该优先。我怎么告诉这个cron?

# run on every day 1 of each month:
59 12 1 * * user script_month

# run on every day 1 of each week:
59 12 * * 1 user script_week
Run Code Online (Sandbox Code Playgroud)

编辑 1

有一个使用“IF”的答案,这是一个很好的解决方法。

那这个呢:

# run on every day 1 of each week:
59 12 2-31 * 1 user script_week
Run Code Online (Sandbox Code Playgroud)

也许它也符合我的要求?(在第 1 天的所有周运行,除非是当月的第 1 天)

编辑2:

我找到了这个:

“如果两个 [日期] 字段都受到限制(即不是 *),则当任一字段与当前时间匹配时,将运行该命令。” (来源:http : //thewatertower.org.uk/news/000160/crontab_the_first_five_fields_combine_to_restrict_the_schedule_except_for_when_they_dont.html

似乎不可能像我在编辑 1 中写的那样?

Ste*_*day 6

script_week检查它是否在每月的第1天运行。如果是,那么在做任何实际工作之前让它退出。例如,在 bash 脚本中,此类检查可能如下所示:

if [ `/bin/date +%d` = "01" ]; then exit 0; fi
Run Code Online (Sandbox Code Playgroud)

如果您愿意,您可以保持script_week不变,而是在crontabfor的条目中进行类似的检查script_week,如下所示:

59 12 * * 1 user if [ `/bin/date +\%d` != "01" ]; then script_week; fi
Run Code Online (Sandbox Code Playgroud)