【发布时间】:2016-09-24 19:00:44
【问题描述】:
假设每五分钟通过 CRON 触发一个作业。出于某种原因,在 10:00 执行的一次执行持续时间明显更长,例如8 分钟。是否在 10:05 触发了第二个实例?
如果是,那么确保作业以单例方式运行且从不重复运行的正确策略是什么?
【问题讨论】:
标签: azure cron azure-webjobs
假设每五分钟通过 CRON 触发一个作业。出于某种原因,在 10:00 执行的一次执行持续时间明显更长,例如8 分钟。是否在 10:05 触发了第二个实例?
如果是,那么确保作业以单例方式运行且从不重复运行的正确策略是什么?
【问题讨论】:
标签: azure cron azure-webjobs
我自己还没有测试过,但是从docs我可以找到那个声明
如果您使用必须作为单个实例运行的计划驱动任务, 请注意以下事项:
- 如果正在运行调度程序的计算实例(例如 使用 Windows 计划任务的虚拟机)进行缩放,您将 运行调度程序的多个实例。这些可以开始 任务的多个实例。
- 如果任务运行时间超过 调度程序事件之间的时间段,调度程序可能会启动另一个 任务的实例而前一个一个仍在运行。
this 部分的文档中也提到了可能的解决方案
默认情况下,WebJobs 与其关联的 Azure Web 应用程序一起扩展 实例。但是,如果您希望 WebJob 仅作为单个 例如,您可以创建一个包含 JSON 的
Settings.job文件 数据{ "is_singleton": true }。这会强制 Azure 只运行一个 WebJob 的实例,即使有多个实例 关联的网络应用程序。这对于计划的作业可能是一种有用的技术 必须作为单个实例运行。
和that 部分
默认情况下,WebJobs 随 Web 应用程序扩展。但是,您可以配置 通过设置
is_singleton在单个实例上运行的作业 配置属性为true。单实例 WebJobs 对于 您不想扩展或同时运行的多个任务 实例,例如重新索引、数据分析和类似任务。
【讨论】: