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

每个月的第一个或最后一个选定的工作日运行的Cron作业,cron,Cron,我有一个表单,用户可以在其中选择何时运行脚本。我有字段{time,day of week,first/last}。现在,当用户选择例如:每个第一个星期一上午10:45-这意味着在每个月的第一个星期一运行脚本时,我如何将其转换为cron作业 谢谢。不幸的是,crontab条目中的“月日”和“周日”字段一起被OR运算,而不是and运算。因此,单靠crontab字段无法真正实现“每月的第一个星期一”;你需要额外的逻辑。你可以这样做: min hr 1-7 * * [ `date +%w` -eq 1

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


谢谢。

不幸的是,crontab条目中的“月日”和“周日”字段一起被OR运算,而不是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 jobs无法指定年份,因此这是您能得到的最接近的结果。

回答如下,但这属于超级用户,而不是stackoverflow。谢谢,但上周五会说什么?首先,我只需要为其他几天插入一周中的某一天,这对吗。周三的示例min hr 1-7*3?@zulq上周五编辑了该示例。要运行的命令之前的最后一列是工作日的编号:0=星期日到6=星期六。
min hr 1-7*1第一个星期一。sh
将实际执行该月的前7天和每个星期一。此网站()提供了以下说明:命令的执行日期可以由两个字段指定-月日和周日。如果两个字段都受到限制(即,不*),则当任一字段与当前时间匹配时,将运行该命令。例如,“30 4 1,15*5”将导致在每个月1日和15日上午4:30以及每个星期五运行命令。谢谢,@StevenMortimer。更新。