代码之家  ›  专栏  ›  技术社区  ›  Sander Marechal

检查PHP beanstalkd后台进程的状态

  •  1
  • Sander Marechal  · 技术社区  · 15 年前

    我有一个用PHP(CakePHP)编写的网站,其中某些资源密集型任务由后台进程处理。这是通过Beanstalkd消息队列完成的。我需要一些方法来检索后台进程的状态,这样我就可以用Monit来监视它。

    Monit 因此,如果出现问题,它可以重新启动后台进程。

    到目前为止,我一直在考虑编写一个PHP CLI脚本,在Beanstalkd中删除一条消息。后台进程拾取消息,并以某种方式将其内部状态传回CLI脚本。但是怎么做呢?插座?共享内存?其他的IPC方法?

    或者我可能太复杂了,有没有更简单的方法用Monit监控这样的过程?

    提前谢谢!

    2 回复  |  直到 15 年前
        1
  •  2
  •   Sander Marechal    15 年前

    下面是我最后做的事情。

    后台进程几乎立即接收此消息(因为它是最高优先级的),生成一条状态消息并将其放入CLI脚本正在监视的队列中。CLI脚本接收到它,然后关闭队列。

    当CLI脚本在30秒内未收到响应时,它将退出,并显示一个错误,指示后台守护程序(很可能)已挂起。

    我把这一切都和莫尼特联系在一起了。Monit现在可以检查后台守护程序是否正在运行(通过pidfile和process list),并验证它实际上仍在处理消息(通过使用CLI工具测试它是否响应状态请求)

        2
  •  1
  •   Alister Bulman    15 年前

    可能有一个连接到Monit或Nagios的插件,运行stats并在“太多”时返回。目前还没有为此编写的“协议”,但要修改现有的基于文本的协议(如nntp或smtp)以实现您的目的似乎并不十分困难。从外观上看,这确实意味着要用C语言编写。

    在CLI-PHP脚本中,我将通过两种不同方法中的一种(或两种)来实现。

    1/将(低优先级)消息放入队列,并确保它在几秒钟内返回。把它放到一个专用的队列中,确保在你把它放到队列中之前没有任何东西,这也是一个很好的补充。

    要将信息返回到网站(无论哪种方式),您都可以写入一个文件,或者写入像Memcached这样的东西,gts可以读取并执行该文件。