【问题标题】:PHP simple daemon without using pcntl_fork不使用 pcntl_fork 的 PHP 简单守护进程
【发布时间】:2012-07-01 10:42:27
【问题描述】:

我的 Web 应用程序的一部分是一个后台脚本,它从 beanstalkd 服务器轮询并处理数据。

这个脚本需要连续运行(就像一个守护进程)。如果它崩溃,它需要重新启动。它也不能启动两次(更准确地说是运行两次)。

由于我想简化部署和开发过程,我想避免使用pcntl_fork。它在 Windows 上不可用,它需要在 Mac 上重新编译 PHP,有时也在 Linux 上......

我可以简单地使用 bash 脚本在后台启动 PHP 脚本吗?

# verify that the script is not already running
...

/usr/bin/php myScript.php &

如果我每隔一小时左右使用 crontab 执行这个批处理,我的进程应该会连续运行,如果崩溃,我的进程最多会在一小时内重新启动?

【问题讨论】:

    标签: php bash cron daemon background-process


    【解决方案1】:

    假设您盲目控制运行脚本的服务器,Supervisor 对您来说可能是一个不错的解决方案。

    它是一个进程控制守护进程,用 Python 编写。您可以对其进行配置以启动您的 PHP 脚本并使其保持运行。 PHP 脚本本身不需要做任何特别的事情。没有分叉,没有手动过程控制,什么都没有。

    另一方面,您还对pcntl_fork 在 Windows 上不可用表示担忧。如果你真的在 Windows 上运行这个东西,Supervisor 不会为你工作,因为它不是 Windows 友好的。请记住,Windows 对 Unix 风格的守护进程也不是很友好,因为它希望将守护进程作为服务来控制。虽然that's possible,但这并不是一个简单或优雅的解决方案。

    【讨论】:

    • 很好的解决方案。对于 Windows(或任何开发环境),主要是能够运行脚本。如果它不作为守护进程运行,那不是主要问题。 pcntl_fork 甚至会阻止脚本启动,所以这是主要问题。
    • 而在这种情况下,由于脚本只需要完全不加修改地运行,Supervisor 就会运行良好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-07
    • 1970-01-01
    • 2011-09-20
    • 2011-01-22
    • 2012-08-07
    相关资源
    最近更新 更多