我们有一个在多个Azure实例上运行的网站 - 通常介于2到5之间。
我想安排一个PHP脚本在每个实例上每隔几分钟运行一次。 (它只是从系统中生成一个本地数据副本,无法处理所有用户实时点击它的负载。)
如果它只是一个实例,那将很容易 - 我会使用Azure Scheduler每5分钟调用 www.example.com/my-scheduled-task.php 。
但是脚本需要在每个实例上运行,以便每个实例都有一个合理的最新数据副本。你会如何实现这一目标?如果它是Azure Scheduler中的某些内容,或者我应该查看某种启动脚本,我无法解决这个问题?
答案 0 :(得分:4)
您可以使用连续的webjob。
只需调整你的php脚本以获得一个循环,并在代码运行之间添加几分钟的睡眠。
连续的webjob将在你的所有实例上运行,即使某些事情失败,它也会被重新启动。
答案 1 :(得分:1)
根据我的经验,在每个webapp实例上运行的PHP webjob是一个很好的解决方案,正如@AmitApple所说。但是,我认为您可以尝试使用带有CRON表达式的预定webjob来确保开始时间,而不是具有休眠时间的连续开始时间。请确保脚本可以在间隔时间内完成。
您可以参考the section Create a scheduled WebJob using a CRON expression
of the doc Run Background tasks with WebJobs
了解如何开始。
请参阅Create a continuously running WebJob
https://azure.microsoft.com/en-us/documentation/articles/web-sites-create-web-jobs/#CreateContinuous部分的说明。
注意:强>
如果您的网络应用程序在多个实例上运行,则会在所有实例上运行连续运行的WebJob。按需和计划的WebJobs在选定用于Microsoft Azure负载平衡的单个实例上运行。
要使Continuous WebJobs可靠地运行并在所有实例上运行,请为Web应用程序启用Always On *配置设置,否则当SCM主机站点空闲时间过长时,它们可能会停止运行。