Azure Function with Timer Trigger 运行 两次

Azure Function with Timer Trigger running twice

我 运行 遇到了类似的情况 但到目前为止,我的解决方案对我没有用。

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

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

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

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

  1. 我正在使用消费计划
  2. 不确定需要多少信息 - 我们使用 Azure DevOps 管道和 Kudu。
  3. v2(预览版)运行时间
  4. 未设置WEBSITE_TIME_ZONE
  5. 我的 CRON 表达式:0 */15 * * * * 我对其含义的期望:函数应该 运行 每 15 分钟。
  6. N/A
  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] Executing 'Functions.unassignDriverPermits' (Reason='Timer fired at 2019-04-18T17:45:00.0044464+00:00', Id=4e142315-60e3-420d-b71a-9990683ba5aa)

2019-04-18T17:45:00.013 [Information] Executing 'Functions.unassignDriverPermits' (Reason='Timer fired at 2019-04-18T17:45:00.0131739+00:00', Id=4c6f4e7a-1e9d-4278-b3c6-0a2b5310199c)

2019-04-18T17:45:33.577 [Information] Log a thing about something

2019-04-18T17:45:33.577 [Information] Log a thing about id 0

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

2019-04-18T17:45:33.281 [Information] Log a thing about something

2019-04-18T17:45:33.282 [Information] Log a thing about id 0

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

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

我的功能曾经遇到过类似的问题,运行 每天 12:00。 RunOnStartup 设置为 true。该函数在消费计划中 运行,并且仅在 运行 之前,该函数每天都会解除分配并在触发时重新启动(在冷启动中)。也许这就是双重调用的原因:一次是为了触发器,一次是因为它已启动)。它已通过将 RunOnStartup 设置为 false 来修复。

确保 RunOnStartup 设置为 false。