workerman重启后,之前的进程依然在执行onWorkerStart方法

daij

因业务场景需求,我在workerman的回调方法onWorkerStart中,加入了定时工作内容(使用的workerman的Timer类),每隔20秒执行一次数据库操作
但是重启workerman后(php start.php restart),发现同时有2个进程在执行onWorkerStart方法的内容(重启前的workerman与重启后新开的workerman,或者是我理解错了,但是确实这个方法有2个进程在同时执行),请问这个是为什么呢,另外,之前的进程会于数个小时后,才会自己注销并停止onWorkerStart的代码执行
因为目前2个方法同时执行会影响到数据内容,所以必须在重启时,强制删除前一个进程才能保证功能的正常运行,当前是找运维在服务器中强制删除前一个进程,请问有什么别的更好的办法吗?
还有,因为之前开发的时候,socket连接中储存了用户的一些数据,所以没有使用平滑重启,是否必须使用平滑重启才可以?
请大佬们不吝赐教,非常感谢

2483 2 0
2个回答

xiuwang

是不是开了2个进程,因为每个进程都执行onWorkerStart,所以有2个进程在执行定时器

  • 暂无评论
dignfei

手动控制:定时任务之前检查一下,发现2个进程时,手动关闭旧的

  • 暂无评论
年代过于久远,无法发表回答
×
🔝