【问题标题】:Checking the status of my PHP beanstalkd background processes检查我的 PHP beanstalkd 后台进程的状态
【发布时间】:2010-12-20 15:43:04
【问题描述】:

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

后台进程是一个与 Beanstalkd 通信的 CakePHP Shell(只是一个 PHP CLI 脚本)。它只是在 Benastalkd 上做一个 reserve() 并等待新消息。当它收到一条消息时,它会处理它。我想通过Monit 监控这个进程,以便在出现问题时重新启动后台进程。

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

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

提前致谢!

【问题讨论】:

    标签: php cakephp monitoring ipc beanstalkd


    【解决方案1】:

    这就是我最终做的事情。

    CLI 脚本连接到 beanstalkd,创建一个新队列(管)并开始观察它。然后它在后台守护进程正在监视的队列中丢弃最高优先级的消息。该消息包含 CLI 脚本正在监视的新队列的名称。

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

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

    我将所有这些都绑定到了 Monit 中。 Monit 现在可以检查后台守护进程是否正在运行(通过 pidfile 和进程列表)并验证它实际上仍在处理消息(通过使用 CLI 工具测试它是否响应状态请求)

    【讨论】:

      【解决方案2】:

      Monit 或 Nagios 可能有一个插件可以连接、运行统计数据并在“太多”时返回。目前还没有为此编写的“协议”,但修改现有的基于文本的协议(如 nntp 或 smtp)来做你想做的事情似乎并不难。从外观上看,这确实意味着用 C 语言编写它。

      从 CLI-PHP 脚本,我会通过两种不同方法中的一种(或两种)来处理它。

      1/ 将(低)优先级消息放入队列,并确保它在几秒钟内返回。将其放入专用队列并确保在放入之前没有任何东西,这也是一个很好的补充。 2/ 执行“统计”并查看有多少人在等待:“当前工作就绪”。

      要将信息返回到网站(无论哪种方式),您都可以写入文件,或写入 gts 读取并执行操作的 Memcached 之类的东西。

      【讨论】:

      • 不是我想要的。您的建议似乎是测试 beanstalkd,而不是我正在使用 beanstalkd 消息的后台进程。所以,我需要以某种方式向我的后台进程发出信号(通过 beanstalkd 或使用 POSIX 信号。我不知道任何其他方式),然后后台进程需要将其状态传达回来。但是怎么做呢?
      猜你喜欢
      • 2011-03-10
      • 1970-01-01
      • 1970-01-01
      • 2016-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-19
      • 2014-08-24
      相关资源
      最近更新 更多