【问题标题】:Cron job to run every first or last chosen day of week of every month [closed]Cron 作业运行每个月的第一个或最后一个选择的星期几[关闭]
【发布时间】:2013-05-06 02:19:43
【问题描述】:

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

谢谢。

【问题讨论】:

  • 在下面回答,但这属于超级用户,而不是 stackoverflow。

标签: cron


【解决方案1】:

不幸的是,crontab 条目中的日期和星期几字段是 ORed 在一起的,而不是 ANDed。所以你不能真的只用 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 作业无法指定年份,所以这大约是您可以得到的最接近的时间。

【讨论】:

  • 谢谢,但是上周五要说什么?同样,首先我只需要在其他日子插入星期几。例如,星期三的最小小时 1-7 * 3?
  • @zulq 编辑了上周五要做的示例。要运行的命令之前的最后一列是工作日的编号:0=星期日到 6=星期六。
  • min hr 1-7 * 1 first-monday.sh 实际上会在每月的前 7 天和每周一执行。该网站 (pantz.org/software/cron/croninfo.html) 给出了以下说明:命令执行的日期可以由两个字段指定 - 月份的日期和星期几。如果两个字段都受限制(即不是 *),则当任一字段与当前时间匹配时,将运行该命令。例如,“30 4 1,15 * 5”将导致在每个月的 1 日和 15 日以及每个星期五的凌晨 4:30 运行命令。
  • 谢谢,@StevenMortimer。已更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
  • 2016-01-26
  • 1970-01-01
  • 2014-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多