因業(yè)務(wù)場景需求,我在workerman的回調(diào)方法onWorkerStart中,加入了定時(shí)工作內(nèi)容(使用的workerman的Timer類),每隔20秒執(zhí)行一次數(shù)據(jù)庫操作
但是重啟workerman后(php start.php restart),發(fā)現(xiàn)同時(shí)有2個(gè)進(jìn)程在執(zhí)行onWorkerStart方法的內(nèi)容(重啟前的workerman與重啟后新開的workerman,或者是我理解錯(cuò)了,但是確實(shí)這個(gè)方法有2個(gè)進(jìn)程在同時(shí)執(zhí)行),請問這個(gè)是為什么呢,另外,之前的進(jìn)程會于數(shù)個(gè)小時(shí)后,才會自己注銷并停止onWorkerStart的代碼執(zhí)行
因?yàn)槟壳?個(gè)方法同時(shí)執(zhí)行會影響到數(shù)據(jù)內(nèi)容,所以必須在重啟時(shí),強(qiáng)制刪除前一個(gè)進(jìn)程才能保證功能的正常運(yùn)行,當(dāng)前是找運(yùn)維在服務(wù)器中強(qiáng)制刪除前一個(gè)進(jìn)程,請問有什么別的更好的辦法嗎?
還有,因?yàn)橹伴_發(fā)的時(shí)候,socket連接中儲存了用戶的一些數(shù)據(jù),所以沒有使用平滑重啟,是否必須使用平滑重啟才可以?
請大佬們不吝賜教,非常感謝
是不是開了2個(gè)進(jìn)程,因?yàn)槊總€(gè)進(jìn)程都執(zhí)行onWorkerStart,所以有2個(gè)進(jìn)程在執(zhí)行定時(shí)器
手動(dòng)控制:定時(shí)任務(wù)之前檢查一下,發(fā)現(xiàn)2個(gè)進(jìn)程時(shí),手動(dòng)關(guān)閉舊的