webman中process下配置的所有任務(wù)都不執(zhí)行了
/**
* 主任務(wù)分發(fā)定時(shí)任務(wù)
* Class TaskDistribute
* @package process
*/
class TaskDistribute
{
public function onWorkerStart()
{
//定時(shí)任務(wù),每個(gè)60秒判斷一次
Timer::add(10, function () {
// echo 'timer is start', PHP_EOL;
//主邏輯
$this->main();
});
echo 'distribute timer is end', PHP_EOL;
}
/**
* 任務(wù)分配主邏輯
*/
public function main()
{
//獲取所有狀態(tài)為未分配的任務(wù)(隊(duì)列任務(wù)),然后進(jìn)行循環(huán)
$where = [
['ExecStatus', '=', 1],//執(zhí)行中
['DistributeStatus', '=', 0]//分發(fā)狀態(tài)為0未分發(fā)
];
$taskInfo = Task::where($where)
->with([
'template'
])
->whereHas('template', function ($query) {
$query->where('ExecType', '=', 1);
})
->get();
$taskModel = new Task();
foreach ($taskInfo as $key => $item) {
Log::channel('TaskDistribute')->debug('task distribute item info is', $item->toArray());
$taskModel->distribute($item);
}
}
}
定時(shí)任務(wù)卡死,不執(zhí)行,必須reload之后才可以,所有定時(shí)任務(wù)都不執(zhí)行了
workerman.log沒(méi)有報(bào)錯(cuò)信息
以下是process配置文件
以下是stdout日志
以下為strace -ttp的返回結(jié)果
再執(zhí)行php start.php status如下
執(zhí)行php start.php status的同時(shí),strace -ttp有輸出信息,如下
執(zhí)行kill -SIGALRM 404970之后,strace界面如下
lsof -nPp 404970輸出如下
怎么判斷不執(zhí)行了?
onWorkerStart里定時(shí)器把輸出打開(kāi),這樣能判斷出是定時(shí)器沒(méi)執(zhí)行還是業(yè)務(wù)日志沒(méi)記錄到。
echo 'timer is start', PHP_EOL;
有問(wèn)題的時(shí)候執(zhí)行php start.php status
,找到task_distribute進(jìn)程pid,執(zhí)行命令strace -ttp 進(jìn)程pid
能看到進(jìn)程系統(tǒng)調(diào)用情況,大概能判斷出哪里有問(wèn)題,如果不會(huì)看到時(shí)候可以發(fā)出來(lái)。
另外你的rabbitmq_receive 進(jìn)程有報(bào)錯(cuò),退出了69次,看下錯(cuò)誤日志。
strace -ttp的返回結(jié)果已經(jīng)貼上去了,會(huì)不會(huì)跟我的操作有關(guān)系?我之前進(jìn)行的測(cè)試,需要調(diào)整linux服務(wù)器時(shí)間,我把時(shí)間調(diào)到了3天之前
php start.php status
截圖下。
保持strace不動(dòng),再開(kāi)一個(gè)終端,執(zhí)行kill -SIGALRM 404970
,strace界面輸出貼下。
然后執(zhí)行lsof -nPp 404970
輸出貼下。