【问题标题】:Constantly Running Gearman Worker不断运行的 Gearman 工人
【发布时间】:2011-04-01 20:51:15
【问题描述】:

我希望能够通过随时启动 Gearman 客户端在后台运行一个进程。

我通过打开到我的服务器的两个 SSH 连接找到了成功,其中一个启动工作程序,另一个然后运行客户端。这会产生所需的输出。

问题是,我希望有一个工作人员在后台持续运行,这样我就可以在需要完成该过程时调用客户端。但是,一旦我关闭了运行工作 PHP 文件的终端,对客户端的调用就不起作用 - 工作人员似乎死了。

有没有办法让工作人员在后台持续运行,这样调用新客户端就可以工作而无需启动新工作人员?

谢谢!

【问题讨论】:

    标签: php gearman


    【解决方案1】:

    如果您希望程序在其父程序死亡后仍继续运行(即您已关闭终端),您必须使用 nohup 调用它:

    nohup your-command &
    


    引用我链接到的相关维基百科页面:

    nohup 是要忽略的 POSIX 命令 HUP(挂断)信号,启用 之后继续运行的命令 发出命令的用户已登录 出。
    HUP(挂断)信号是 按照惯例,终端警告的方式 取决于注销过程。


    对于另一个(可能更多)有趣的解决方案,请参阅以下文章:Dæmonize Your PHP。

    它指向Supervisord,它确保进程仍在运行,并在必要时重新启动它。

    【讨论】:

    • 非常感谢马丁,一如既往的帮助!在 PHP 脚本上调用 nohup 会使其永远运行,还是需要设置某种无超时?
    • 您仍然需要配置 max_execution_time (并且,在较小的范围内 memory_limit) 进行配置,因此您的脚本不会在一段时间后被杀死。
    【解决方案2】:

    有没有办法让工作人员在后台持续运行,这样调用新客户端就可以工作而无需启动新工作人员?

    Supervisor!

    2009 PHP Advent Calendar 有a quick article on using Supervisor(和其他技巧)可以创建持续运行的 PHP 脚本,而无需处理 PHP 本身的守护进程。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-05
    相关资源
    最近更新 更多