5

我需要创建一个将在每个月的最后一天运行的 cron 表达式。我需要这个来安排网络作业。

我正在使用此表达式,但网络作业并未L用于查找每个月的最后一天。

"0 0 11 L * *"

谢谢。

4

2 回答 2

2

根据您的描述,我在我这边检查了这个问题。对于一个简单的方法,首先我在 azure 门户上对其进行了测试,如下所示:

在此处输入图像描述

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

另外,我用表达式在我这边运行了 webjob 0/5 * * L * *,然后我得到了以下错误:

未处理的异常: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发现我们只能覆盖内置的DailyScheduleand WeeklySchedule,但它们不能满足您的要求,我假设您可能需要构建您的自定义时间表继承TimerSchedule来实现您的目的。

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

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

于 2017-08-25T03:56:12.073 回答
0

我们目前不支持“L”。我们使用 ncrontab 来解析 cron 表达式,作者指出这不受支持:atifaziz/NCrontab#9

我见过的另一种选择:为 28-31 或每个月设置一个 cron 表达式,并让函数本身检查它是否实际上是该月的最后一天。如果没有,退出;如果是,请继续。

于 2018-01-15T02:32:40.797 回答