Azure Function 计时器是 运行 两次,当我登录到 Azure 门户时

Azure Function timer is running twice and when I log onto the Azure portal

我在 Azure 中有一个定时功能应用程序,计划每天 运行 22:00。但是,它似乎每天都在 21:59 和 22:00 上 运行。当我登录到 Azure 门户检查日志时,它也会随机出现 运行。

这是我得到的重复条目的时间戳示例:

我在网上搜索过,但没有找到可行的解决方案。

这是应用程序的签名,大约需要 20 秒才能完成:

[FunctionName("Function1")]
public static void Run([TimerTrigger("0 0 22 * * *", RunOnStartup = false)]TimerInfo myTimer, TraceWriter log)
{
   // My code
}

这是我的 local.settings.json:

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "DefaultEndpointsProtocol=https;AccountName=XXX;AccountKey=XXX",
    "AzureWebJobsDashboard": "DefaultEndpointsProtocol=https;AccountName=XXX;AccountKey=XXX",
    "type": "timerTrigger",
    "schedule": "0 0 22 * * *",
    "useMonitor": false,
    "SQLConn": "Server=tcp:XXX.database.windows.net,1433;Initial Catalog=XXX;Persist Security Info=False;User ID=XXX;Password=XXX;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"
  },
  "disabled": false
}

谁能帮帮我?

此外,Azure 函数中的 "Monitor" 部分没有任何异常。

Here's an example of the timestamps of the duplicate entries I am getting:

根据您的屏幕截图,我想结果属于 started 和 completed status function logs in azure function。这些状态日志由系统自动创建。

我已经在我这边测试了 TimeTrigger。 TimeTrigger每次运行时,总会有两个(started, completed)个status Function日志。它们的日志被打包在一起,几乎同时输出。如果时间表很长,不同状态日志之间的时间戳将是一个延迟。如果时间表很短(每 4 秒),不同状态之间的时间戳总是相同的。您还可以在此 article.

中看到两个状态函数日志

两个状态函数日志(已启动、已完成):

我查看了您的函数应用程序的内部日志(感谢分享名称!),我看到以下内容:

2018-03-02 14:43:50.4977179: Function 'DemoAzureFunction.Function1.Run' is configured to run on startup. Executing now.
2018-03-02 14:44:01.7856855: Function 'DemoAzureFunction.Function1.Run' updated status: Last='2018-03-02T14:43:48.6103583+00:00', Next='2018-03-02T22:00:00.0000000+00:00', LastUpdated='3/2/2018 2:43:48 PM'

所以在我看来,您的函数配置中有一次 RunOnStartup = true。以这种方式配置时,访问门户可以立即触发计时器 运行(与配置的计划分开),因为门户交互将唤醒您的函数应用程序。

问题仍然存在,似乎只影响消费计划功能。

我有很多从未遇到过此问题的应用程序服务计划功能,但我的前两个消费计划功能出现了报告的问题。两者都将 RunAtStartUp 设置为 true,因此将尝试按照之前的建议关闭它。

这肯定应该被MS视为一个错误?显然不是,因为这个错误在一年多后仍然存在。