我需要创建一个将在每个月的最后一天运行的 cron 表达式。我需要这个来安排网络作业。
我正在使用此表达式,但网络作业并未L
用于查找每个月的最后一天。
"0 0 11 L * *"
谢谢。
根据您的描述,我在我这边检查了这个问题。对于一个简单的方法,首先我在 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发现我们只能覆盖内置的DailySchedule
and WeeklySchedule
,但它们不能满足您的要求,我假设您可能需要构建您的自定义时间表继承TimerSchedule
来实现您的目的。
AFAIK,除了使用您的 webjob 设置 cron 表达式之外,我们还可以利用 Azure Scheduler 在某个计划上触发我们的 webjob。这是我的测试,你可以参考一下:
将您的网络作业配置为手动触发
登录到azure 门户,添加您的Azure 调度程序,然后将操作设置指向您的 webjob 端点,以允许被触发。有关更多详细信息,您可以参考本教程中有关添加调度程序作业的部分
然后按如下方式配置计划:
此外,对于完整的 cron 表达式支持,您可以在Azure/azure-webjobs-sdk-extensions问题中添加您的反馈。
我们目前不支持“L”。我们使用 ncrontab 来解析 cron 表达式,作者指出这不受支持:atifaziz/NCrontab#9
我见过的另一种选择:为 28-31 或每个月设置一个 cron 表达式,并让函数本身检查它是否实际上是该月的最后一天。如果没有,退出;如果是,请继续。