每月的每个第一个星期二使用NCRONTAB进行Azure函数

时间:2020-05-28 13:15:03

标签: cron azure-functions

我该如何使用Azure函数(版本3和.NET Core)创建计时器触发器,该触发器必须在每个月的上午8点的每个第一个星期二执行。从现在开始(05/08/2020)这必须是接下来的五次出现:

  1. 2020/06/02周二08:00:00
  2. 2020/07/07周二08:00:00
  3. 2020/08/04周二08:00:00
  4. 2020/09/01周二08:00:00
  5. 2020/10/06周二08:00:00

通过使用www.cronmaker.com,我接下来是NCRONTAB:

0 0 8 ? 1/1 TUE#1 *

但是接下来我有一个例外:

计划表达式0 0 8 ? 1/1 Tue#1 *无法识别为有效的CRON表达式或TimeSpan字符串。

然后我开始将CRON表达式更改为下一个变量:

CORN              | Result
----------------- |-------------------------------------------
0 0 8 ? 1/1 Tue#1 | Error from above
0 0 8 * 1/1 Tue#1 | Error from above
0 0 8 1/1 Tue#1 * | Error from above
0 0 8 * 1/1 Tue 1 | Error from above
0 0 8 ? 1/1 Tue 1 | Error from above
0 0 8 * 1/1 Tue/1 | 2020/05/29 08:00:00 - 2020/05/30 08:00:00
0 0 8 * * Tue/2   | 2020/05/30 08:00:00 - 2020/06/02 08:00:00
0 0 8 * 1/1 Tue/2 | 2020/05/30 08:00:00 - 2020/06/02 08:00:00
0 0 8 ? 1/1 Tue/2 | Error from above

所以我所做的每个表达式都无法按预期工作。我的问题是:正确的表达是什么?

2 个答案:

答案 0 :(得分:1)

不幸的是,计时器触发器使用了NCrontab库,该库没有“第一个星期二”的概念。我认为您最好的办法是将表达式设置为0 0 8 * * 2以在每个星期二的上午8点触发,并在实际函数中添加一些代码,如果不是当月的第一个星期二,该函数会立即返回。

答案 1 :(得分:1)

该月的第一个星期一是从第一个到第7个(包括第一个)的日期(只有一个)。然后,cron表达式将很容易获得。

假设它应该是0 0 8 1-7 * Tue,下面是我的测试,它显示了前五个日期。

enter image description here