Azure函数TimerTrigger仅运行一次

时间:2019-07-02 11:32:52

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

这是我的功能。杰森

{   "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的日志: enter image description here

我重新运行它,现在它只运行一次。:enter image description here

2 个答案:

答案 0 :(得分:1)

类似于DavidG said:您显示给我们的日志显示函数PullRequest至少运行了 3次

  • 一旦executing日志行不可见,原因尚不清楚
  • 因为计时器被触发(@ 11:30:00)
  • 一次是因为它是通过主机API通过编程方式调用的(em)(手动称为AKA)

您的CRON表达式*/5 * * * * *大致翻译为“每次将秒数除以5都会运行一次”。这与您提供的日志不符。您确定自己使用的是CRON表达式吗?

  

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

     

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

取自Timer trigger for Azure Functions - CRON expressions

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

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

  

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

  

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

来自Work with Azure Functions Core Tools

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

答案 1 :(得分:1)

时间触发器将根据CORN表达式自动执行,即,在您的情况下,此函数将每五秒钟执行一次;如果您从azure门户网站运行它,它将仅运行一次。 如果要检查上次执行的时间,可以转到“监视器”选项卡并检查时间。 我已经在本地执行了它,并且按预期工作 enter image description here