Cron表达式在每个月的最后一天运行

时间:2017-08-24 12:10:24

标签: azure cron webjob

我需要创建一个cron表达式,它将在每个月的最后一天运行。我需要这个来安排webjob。

我正在使用此表达式但是webjob没有使用L来查找每个月的最后一天。

"0 0 11 L * *"

感谢。

2 个答案:

答案 0 :(得分:2)

根据你的描述,我在我这边检查了这个问题。一个简单的方法,首先我在azure门户网站上测试它如下:

enter image description here

注意:根据我的测试,?的特殊字符(LW{day})无效。

另外,我使用0/5 * * L * *表达式运行webjob,然后我收到以下错误:

  

未处理的异常:Microsoft.Azure.WebJobs.Host.Indexers.FunctionIndexingException:错误索引方法' Functions.CronJob' ---> System.Reflection.TargetInvocationException:调用目标抛出了异常。 ---> NCrontab.CrontabException:' L'不是有效的[Day] crontab字段表达式。 ---> NCrontab.CrontabException:' L'不是有效的[Day] crontab字段值。它必须是1到31之间的数值(全包)

然后我按照此示例TimerSamples.cs发现我们只能覆盖内置DailyScheduleWeeklySchedule,但它们无法满足您的要求,我认为您可能需要构建自定义计划会继承TimerSchedule以实现您的目的。

AFAIK,除了使用您的webjob设置cron表达式之外,我们还可以利用Azure Scheduler在某些时间表上触发我们的webjob。这是我的测试,你可以参考它:

  • 将您的webjob配置为手动触发

  • 登录azure portal,添加Azure Scheduler,然后将操作设置指向允许触发的webjob端点。有关详细信息,请参阅此tutorial

  • 中有关添加计划程序作业的部分。
  • 然后按如下方式配置计划:

    enter image description here

此外,对于完整的cron表达式支持,您可以在Azure/azure-webjobs-sdk-extensions的问题上添加反馈。

答案 1 :(得分:0)

我们目前不支持' L'我们使用ncrontab来解析cron表达式,作者注意到这不支持:atifaziz / NCrontab#9

我已经看过一个替代方案:为28-31或每个月设置一个cron表达式并让函数本身检查它是否实际上是该月的最后一天。如果没有,退出;如果是这样,继续。