我需要長(zhǎng)期運(yùn)行一個(gè)外部的可以執(zhí)行文件,它帶有一個(gè)rpc服務(wù),然后在workerman里做一些定時(shí)器,定時(shí)請(qǐng)求rpc服務(wù)。我的想法是啟動(dòng)兩個(gè)worker,第一個(gè)用來執(zhí)行外部的命令,worker啟動(dòng)時(shí)啟動(dòng),worker退出時(shí)退出,另一個(gè)worker里做邏輯。
在第一個(gè)worker里,好像不適合使用exec等命令,因?yàn)檫@些命令是阻塞的。那么直接簡(jiǎn)單使用exec呢?
我還使用symfony/process區(qū)異步執(zhí)行命令,但是該組件有一個(gè)超時(shí)配置項(xiàng),無法關(guān)閉,不符合我的需求。
還有就是使用popen,但這樣無法很好地管理外部進(jìn)程的狀態(tài)和輸出,且獲取輸出也是同步阻塞的,并非一個(gè)事件。
如果并且如果使用popen的話,有兩個(gè)問題,開發(fā)模式時(shí),在stop回調(diào)中調(diào)動(dòng)pclose關(guān)閉進(jìn)程:
$worker->onWorkerStop = function ($worker) {
pclose($worker->process);
};
在終端中需要ctrl+c兩次才能完全退出。
而如果進(jìn)入守護(hù)進(jìn)程模式,使用stop命令退出,只能退出worker,不能正確關(guān)閉popen的外部命令!
workerman有沒有內(nèi)置類似的機(jī)制呢?