0

我有一个 azure webjob TimerTrigger。

我们可能会被引导以某种方式停止 webjob(例如更改 appSetting、中止 webjob)。

Webjob 在 Azure 中定义为 TimerTrigger。在 webjob 的 appSettings 中有 AzureWebJobsDashboard 和 AzureWebJobsStorage 的存储帐户。webjob 在一天中的某个时间执行。网络作业的执行可能会持续 5 或 6 个小时。存储帐户(大约 13000 个)和存储表中有大量文字。

问题是 :

重新启动网络作业时,通常会出现UnscheduledInvocationReason: IsPastDue, OriginalSchedule。我想避免这种情况,下一次执行 webjob 将根据 timerTrigger webjob 的 cron 表达式完成。

有可能吗,如果可以,该怎么做?

任何的想法 ?

问候。

4

1 回答 1

0

如果我正确理解了问题,您可以使用RunOnStartup = false(默认)和UseMonitor = false

Azure Functions 的计时器触发器

范围 描述
RunOnStartup 如果true,则在运行时启动时调用该函数。例如,运行时在函数应用因不活动而处于空闲状态后唤醒时启动。当函数应用因函数更改而重新启动时,以及函数应用横向扩展时。所以runOnStartup应该很少设置为true,尤其是在生产中。
UseMonitor 设置为truefalse以指示是否应监视计划。计划监控持续发生计划,以帮助确保即使在函数应用实例重新启动时也能正确维护计划。如果未明确设置,则默认true用于重复间隔大于或等于 1 分钟的计划。对于每分钟触发一次以上的计划,默认值为 false。

有几种方法可以设置这些值,但是可以从它自己的属性中设置

[FunctionName("MyLovelyHorseFunction")]
public static void Run(
  [TimerTrigger(
     "0 */5 * * * *",
     RunOnStartup = false,
     UseMonitor = false)]
  TimerInfo myTimer,
  ILogger log)
{
   ...
}

另请注意,您可以明确检查是否过期(根据您的需要,这可能会或可能不会帮助您)

if (myTimer.IsPastDue)
{    
    ...
}
于 2021-06-17T09:10:46.657 回答