如何实现简单的外部命令进程管理

augushong

问题描述

我需要长期运行一个外部的可以执行文件,它带有一个rpc服务,然后在workerman里做一些定时器,定时请求rpc服务。我的想法是启动两个worker,第一个用来执行外部的命令,worker启动时启动,worker退出时退出,另一个worker里做逻辑。

为此你搜索到了哪些方案及不适用的原因

在第一个worker里,好像不适合使用exec等命令,因为这些命令是阻塞的。那么直接简单使用exec呢?

我还使用symfony/process区异步执行命令,但是该组件有一个超时配置项,无法关闭,不符合我的需求。

还有就是使用popen,但这样无法很好地管理外部进程的状态和输出,且获取输出也是同步阻塞的,并非一个事件。

如果并且如果使用popen的话,有两个问题,开发模式时,在stop回调中调动pclose关闭进程:

$worker->onWorkerStop = function ($worker) {
    pclose($worker->process);
};

在终端中需要ctrl+c两次才能完全退出。
而如果进入守护进程模式,使用stop命令退出,只能退出worker,不能正确关闭popen的外部命令!

workerman有没有内置类似的机制呢?

270 1 0
1个回答

walkor

试下 proc_open

  • 暂无评论
🔝