【问题标题】:Azure function TimerTrigger only running onceAzure 函数 TimerTrigger 仅运行一次
【发布时间】:2019-07-02 11:32:52
【问题描述】:

这是我的 Function.Json

{   "generatedBy": "Microsoft.NET.Sdk.Functions-1.0.28",   "configurationSource": "attributes",   "bindings": [
    {
      "type": "timerTrigger",
      "schedule": "*/5 * * * * *",
      "useMonitor": true,
      "runOnStartup": false,
      "name": "myTimer"
    }   ],   "disabled": false,   "scriptFile": "../bin/PullRequest.dll",   "entryPoint": "PullRequest.PullRequest.Run" }

这是我的实际功能:

[FunctionName("PullRequest")]
public static void Run([TimerTrigger("*/5 * * * * *")]TimerInfo myTimer, ILogger log)
{
     if (myTimer.IsPastDue)
     {
         log.LogInformation("Timer is running late!");
     }
     log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
}

当我尝试在 Azure 门户上运行此功能时,它只运行一次并停止。

这是 Azure Funciton 的日志:

我重新运行它,现在它只运行一次。:

【问题讨论】:

  • @Rafal 同意,但我相信这个 cron 表达式是每 5 秒一次。
  • @DavidG /是的。我不确定它为什么没有运行。它只运行一次。
  • 你给我们的日志显示它运行了不止一次?
  • @DavidG 我正在重新运行该功能。这就是它显示多次的原因
  • @DavidG 我的坏大卫。给出的时间结果是 5 分钟而不是 5 秒。

标签: c# azure azure-functions azure-functions-runtime timer-trigger


【解决方案1】:

时间触发器将根据 CORN 表达式自动执行,即在您的情况下,此函数将每五秒执行一次,如果您从 azure 门户运行它,它将只运行一次。 如果您想检查最后一次执行的时间,您可以转到 Monitor 选项卡并检查时间。 我已在本地执行此操作并按预期工作

【讨论】:

  • 我确实从monitor 选项卡中获得了每 5 分钟运行一次的日志。至少我可以看到它正在运行。
【解决方案2】:

就像DavidG said:你向我们展示的日志,表明函数PullRequest 至少运行了3 次

  • 曾经executing日志行不可见,所以原因不清楚
  • 曾经因为计时器触发 (@11:30:00)
  • 曾经是因为它通过主机 API 以编程方式调用(AKA 手动)

您的 CRON 表达式 */5 * * * * * 大致翻译为“每次秒数可被 5 整除时运行此程序”。这与您提供的日志不匹配。您确定您使用的是 CRON 表达式吗?

Azure Functions 使用 NCronTab 库来解释 CRON 表达式。一个 CRON 表达式包含六个字段:

{second} {minute} {hour} {day} {month} {day-of-week}

取自Timer trigger for Azure Functions - CRON expressions

编辑:
在 Timer Trigger 上运行的函数会在指定的计时器间隔内自动触发。要让函数真正运行,您(当然)需要运行一些东西来执行该触发器。否则:如何触发它们?

在 Azure 中,函数运行时负责在正确的时间触发函数。在本地,当您调试应用程序时自动启动的func.exe 工具将为您执行此操作。但如果不运行,什么都不会发生

Azure Functions Core Tools 可让您从命令提示符或终端在本地计算机上开发和测试您的函数。您的本地函数可以连接到实时 Azure 服务,并且您可以使用完整的 Functions 运行时在本地计算机上调试您的函数。

要运行 Functions 项目,请运行 Functions 主机。宿主为项目中的所有功能启用触发器。

取自Work with Azure Functions Core Tools

简而言之:“主机启用触发器。它需要运行以具有触发任何功能的某些东西”。

【讨论】:

  • 当然。现在,当我打开一个窗口时,只有它在运行。我不确定我是否理解得很好。您能否将我重定向到正确的方向,以便我可以获得更多信息。
  • 谢谢。这是需要考虑的少数信息。
猜你喜欢
  • 2021-12-05
  • 1970-01-01
  • 2016-05-09
  • 2020-11-29
  • 1970-01-01
  • 1970-01-01
  • 2014-10-19
  • 1970-01-01
  • 2015-09-21
相关资源
最近更新 更多