2

这是我的 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 的日志: 在此处输入图像描述

我重新运行它,现在它只运行一次。:在此处输入图像描述

4

2 回答 2

1

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

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

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

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

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

取自Azure Functions - CRON 表达式的计时器触发器

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

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

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

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

取自使用 Azure Functions 核心工具

简而言之:“主机启用触发器。它需要运行才能触发任何功能”。

于 2019-07-02T12:23:52.907 回答
1

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

于 2019-07-02T12:30:39.290 回答