【问题标题】:Background PHP Processes后台 PHP 进程
【发布时间】:2011-09-29 11:08:53
【问题描述】:

我正在开发一个网站,该网站需要大量后台进程才能运行。例如,队列、视频编码器和一些其他类型的后台进程。目前,我将这些作为 PHP cli 脚本运行,其中包含:

while (true) {

    // some code

    sleep($someAmountOfSeconds);

}

好的,这些都可以正常工作,但我正在考虑将它们设置为一个守护进程,这将为它们提供一个我可以监控的实际进程 ID,我也可以在后台运行它们而无需一直打开终端.

我想知道是否有更好的方法来处理这些问题?我也在考虑 cron 作业,但其中一些进程需要每隔几秒循环一次。

有什么建议吗?

【问题讨论】:

    标签: php process


    【解决方案1】:

    创建一个可以调用和提问的守护进程似乎是明智的选择。取决于您的主机是否允许这样的事情,特别是如果您要求它每隔几秒钟工作一次,那么基于操作系统的服务/守护程序肯定比其他任何东西都更明智。

    【讨论】:

    • 是的,我有几个专门用于这个项目的盒子,所以我可以运行我真正想要的任何东西。
    • 那么服务/守护进程肯定是要走的路。
    【解决方案2】:

    您可以在 PHP 中创建一个守护进程,但根据我的经验,这是一项艰巨的工作,而且由于 PHP 的内存管理和错误处理,结果是不可靠的。

    我遇到了同样的问题,我想用 PHP 编写我的逻辑,但是让它由一个稳定的程序进行守护,如果它失败,它可以重新启动 PHP 脚本,所以我写了The Fat Controller

    它是用 C 语言编写的,作为守护进程运行,可以运行 PHP 脚本,或者任何东西。如果 PHP 脚本由于某种原因结束,Fat Controller 将重新启动它。这意味着您不必负责守护进程或错误恢复 - 一切都为您处理。

    胖控制器还可以做很多其他事情,例如非常适合队列处理的并行处理,您可以在此处阅读一些潜在的用例:

    http://fat-controller.sourceforge.net/use-cases.html

    【讨论】:

      【解决方案3】:

      我已经使用 PHP 运行后台任务 5 年了,这与使用任何其他语言没有什么不同。只需使用 CRON 并锁定文件。锁定文件将阻止脚本的多个实例运行。

      监控你的代码也很重要,我经常做的一项检查是为了防止过时的锁定文件阻止脚本运行,是让第二个 CRON 作业检查锁定文件是否早于几分钟,以及是否存在PHP 脚本正在运行,如果没有,则删除锁定文件。

      使用这种技术,您可以将 CRON 设置为每分钟运行一次脚本而不会出现问题。

      【讨论】:

        【解决方案4】:

        使用 PEAR 的 System::Daemon 模块。

        【讨论】:

          【解决方案5】:

          一个解决方案(我真的需要自己尝试,因为我可能需要它)是使用 cron,但让进程循环五分钟左右。然后,让 cron 每五分钟启动一次。当一个人死去时,下一个人应该完成(或接近完成)。

          请记住,两者可能会有些重叠,因此您需要确保这不会导致冲突(例如写入同一个视频文件)。一些简单的进程间通信可能很有用,即使它只是写入临时目录中的 PID 文件。

          这种方法技术含量有点低,但有助于避免 PHP 长期挂在内存上 - 某种内置任务重新启动!

          【讨论】:

            猜你喜欢
            • 2011-03-31
            • 1970-01-01
            • 2011-11-27
            • 2010-09-07
            • 1970-01-01
            • 2013-01-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多