如何创建每3个月执行一次的Cron作业?

时间:2019-11-06 16:42:09

标签: cron hangfire

我正在Hangfire的ASP.NET Core中使用Cron (recurring) Jobs,我需要创建一个从给定开始日期开始每三个月运行的作业。

因此,如果开始日期为2019年11月15日,则应将其运行于2019年11月15日,2020年2月15日,2020年5月15日等等。

我需要它每3个月永远运行一次。。

因此,我为此尝试了以下cron表达式:“ 0 0 15 11/3吗?”或“ 0 0 15 11/3 *”

但是在this translating site上对其进行了测试之后,它告诉我它将在以下日期运行:

2019-11-15
2020-11-15
2021-11-15
2022-11-15
2023-11-15

my cron expression after testing it

那么,如果是这样,那么如何使它从如上所述的2019年11月15日开始每三个月运行一次,并使其永远运行下去?

2 个答案:

答案 0 :(得分:1)

cron中的month字段取1到12之间的数字;根据所使用的cron实现,您可以为month字段使用明确的列表:

0 0 15 2,5,8,11 *

或带步长的范围:

0 0 15 2-12/3 *

crontab.guru似乎也支持带步长的单个值,但是crontab man page并未提及这种样式,因此它可能行不通:

0 0 15 2/3 *

如果您希望在首次运行前三个月以上进行设置,则必须手动检查日期;在Shell中(使用GNU date),您将执行以下操作:

0 0 15 2-12/3 * [ $(date +%%s) -gt $(date -d '2019-11-01' +%%s) ] && yourcommand

将当前日期与2019年11月1日进行比较;如果大于该值,则运行命令。

答案 1 :(得分:0)

简单的解决方案是使用以下命令:

0 0 15 */3 *

非常简单。这是您对 crontab.guru 网站满意的输出 output of cron job