【问题标题】:Run a scheduled Azure PHP script on each instance在每个实例上运行计划的 Azure PHP 脚本
【发布时间】:2016-03-20 15:10:19
【问题描述】:

我们有一个网站在多个 Azure 实例上运行——通常在 2 到 5 个之间。

我想安排一个 PHP 脚本在每个实例上每隔几分钟运行一次。 (它只是从无法处理所有用户实时访问的负载的系统中制作数据的本地副本。)

如果只是一个实例,那将很容易 - 我会使用 Azure Scheduler 每 5 分钟调用一次 www.example.com/my-scheduled-task.php

但脚本需要在每个实例上运行,以便每个实例都有一个合理的最新数据副本。您将如何实现这一目标?我无法确定它是在 Azure 调度程序中,还是我应该查看某种启动脚本?

【问题讨论】:

  • 您能否说明您使用的是什么特定的 Azure 技术?它是 Azure Web 应用程序,还是 Azure 云服务?
  • 嗨,David,我们在 Azure Web Apps 上运行。

标签: php azure azure-web-app-service scheduler azure-webjobs


【解决方案1】:

您可以为此使用连续的网络作业。

只需调整您的 php 脚本,使其有一个循环,并在您的代码运行之间添加几分钟的睡眠。

连续网络作业将在您的所有实例上运行,即使出现故障,它也会重新启动。

【讨论】:

    【解决方案2】:

    根据我的经验,正如@AmitApple 所说,在您的每个 webapp 实例上运行的 PHP webjob 是一个很好的解决方案。但是,我认为您可以尝试使用带有 CRON 表达式的计划网络作业来确保开始时间,而不是使用睡眠时间的连续网络作业。并且请确保脚本能在间隔时间内完成。

    您可以参考the section Create a scheduled WebJob using a CRON expression of the doc Run Background tasks with WebJobs了解如何开始。

    请参阅Create a continuously running WebJobhttps://azure.microsoft.com/en-us/documentation/articles/web-sites-create-web-jobs/#CreateContinuous部分的注释。

    注意:

    如果您的 Web 应用程序在多个实例上运行,则持续运行的 WebJob 将在您的所有实例上运行。按需和计划的 WebJobs 在 Microsoft Azure 选择用于负载平衡的单个实例上运行。

    要让 Continuous WebJobs 在所有实例上可靠运行,请为 Web 应用启用 Always On* 配置设置,否则当 SCM 主机站点空闲时间过长时它们可能会停止运行。

    【讨论】:

    • 这种方法的问题是它不会在所有实例上运行,只能在一个实例上运行。
    • @AmitApple 当然。如果 Web 应用程序在多个实例上运行,则连续运行的 WebJob 将同时在所有实例上运行。谢谢。
    • 非常感谢,彼得!这是非常有用的信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    相关资源
    最近更新 更多