我有一个表单,用户可以选择何时运行脚本。我fields {time,day of week, first/last}
。现在当用户选择例如:每个第一个星期一上午10:45 - 这意味着每个月的每个第一个星期一运行脚本,我该如何将其转换为cron作业。
感谢。
答案 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作业无法指定一年,所以这就差不多了。