计时器触发器运行两次的Azure功能

时间:2019-04-18 17:59:51

标签: azure azure-functions crontrigger

我遇到了类似的情况 Azure Function timer is running twice and when I log onto the Azure portal 但是我到目前为止,那里的解决方案对我来说还行不通。

我的函数(用Node编写)在计时器上运行(每15分钟一次)。在Application Insights和Azure门户监视器日志中,按预期(大概是由于采样),我每15分钟看到一次调用。但是,输出发生了两次(我正在将记录写入Cosmos集合)。当我查看功能的实时日志时(在门户中,导航至功能代码并从屏幕底部拉出日志),我可以看到它运行了两次,非常接近。下面的示例日志。间隔重叠,所以我不认为这是CRON的问题(但我不是CRON专家)。

我确实考虑过runOnStartup。我不确定是否默认为false,所以将其设置为false并重新启动。重启后同样的问题(我仍然对此表示怀疑,因为在一分钟计时器上运行的类似功能的应用程序按预期运行)。

我也尝试过从门户手动运行该功能。当我这样做时,它只会运行一次。

提供Azure函数github wiki上请求的信息:

  1. 我正在使用消费计划
  2. 不确定需要多少信息-我们使用Azure DevOps管道和Kudu。
  3. v2(预览版)运行时
  4. 未设置WEBSITE_TIME_ZONE
  5. 我的CRON表达式:0 * / 15 * * * *我的意思是:函数应该每15分钟运行一次。
  6. 不适用
  7. 从近距离开始提供两个-

    • 调用ID:4e142315-60e3-420d-b71a-9990683ba5aa
    • 调用日期时间:2019-04-18T17:45:00.0044464 + 00:00
    • 地区:美国东部

    • 调用ID:4c6f4e7a-1e9d-4278-b3c6-0a2b5310199c

    • 调用日期时间:2019-04-18T17:45:00.0131739 + 00:00
    • 地区:美国东部

示例日志显示了两个重叠的调用(为简单起见,实际的日志文本进行了略微编辑):

  

2019-04-18T17:45:00.004 [Information]执行'Functions.unassignDriverPermits'(原因='计时器于2019-04-18T17:45:00.0044464 + 00:00触发,Id = 4e142315-60e3-420d -b71a-9990683ba5aa)

     

2019-04-18T17:45:00.013 [Information]执行'Functions.unassignDriverPermits'(原因='计时器于2019-04-18T17:45:00.0131739 + 00:00发射,ID = 4c6f4e7a-1e9d-4278 -b3c6-0a2b5310199c)

     

2019-04-18T17:45:33.577 [信息]记录一些事情

     

2019-04-18T17:45:33.577 [信息]记录有关id 0的事情

     

2019-04-18T17:45:33.586 [Information]执行了'Functions.unassignDriverPermits'(成功,Id = 4e142315-60e3-420d-b71a-9990683ba5aa)

     

2019-04-18T17:45:33.281 [信息]记录一些事情

     

2019-04-18T17:45:33.282 [信息]记录有关id 0的事情

     

2019-04-18T17:45:33.294 [Information]执行了'Functions.unassignDriverPermits'(成功,Id = 4c6f4e7a-1e9d-4278-b3c6-0a2b5310199c)

2 个答案:

答案 0 :(得分:3)

我曾经有一个类似的问题,该问题每天在12:00运行。 RunOnStartup设置为true。该功能正在按消耗计划运行,并且仅每天运行一次,该功能会解除分配并在触发时重新启动(冷启动)。也许这就是两次调用的原因:一次是触发器,一次是因为它已启动)。通过将RunOnStartup设置为false可以解决此问题。

确保RunOnStartup设置为false。

答案 1 :(得分:1)

两个调用ID似乎来自两个不同的应用程序(可能是prod / dev吗?) 您是否可以根据应用名称过滤日志,以验证同一触发器是否触发两次?