Cron工作每个月的第一个或最后一个选定日期运行

时间:2013-05-11 15:04:26

标签: cron

我有一个表单,用户可以选择何时运行脚本。我fields {time,day of week, first/last}。现在当用户选择例如:每个第一个星期一上午10:45 - 这意味着每个月的每个第一个星期一运行脚本,我该如何将其转换为cron作业。

感谢。

1 个答案:

答案 0 :(得分:3)

不幸的是,crontab条目中的日期和星期几字段是ORed而不是AND。所以你不能单独使用crontab字段来做“本月的第一个星期一”;你需要额外的逻辑。你可以这样做:

min hr 1-7 * * [ `date +%w` -eq 1 ] && first-monday.sh

查找工作日的最后一个实例有点棘手,因为它取决于当月的天数:

min hr 25-31 1,3,5,7,8,10,12 * [ `date +%w` -eq 5 ] && last-friday.sh
min hr 24-30 4,6,9,11        * [ `date +%w` -eq 5 ] && last-friday.sh
min hr 22-28 2               * [ `date +%w` -eq 5 ] && last-friday.sh

在2月29日星期五落后的闰年中,最后一个条目实际上将在22日运行脚本,但由于cron作业无法指定一年,所以这就差不多了。