workerman服务不能关闭怎么办

2023-06-01 00:00:00 服务 关闭 workerman

问题描述:

启动脚本里执行 Worker::stopAll() 并不能停止 workerman,

Worker::stopAll() 只有在运行 workerman 的主进程里执行才有效,

外部其它进程执行没有效果。


停止 Workerman 的流程是


1、找到 Workerman 主进程 pid

2、给 pid 发送 SIGINT 信号 (posix_kill(SIGINT, pid))

3、workerman 主进程收到 SIGINT 信号后自身执行 Worker::stopAll() 完成服务停止。



这三个步骤 workerman 内部应封装好,调用流程是


1、设置 $argv = 'stop';

2、运行 Worker::runAll();

3 workerman 可以一直运行么

workerman 可以一直运行,以 daemon(守护进程)方式启动 workerman 即可后台一直运行。


启动停止 workerman:


启动

以 debug(调试)方式启动

php start.php start


以 daemon(守护进程)方式启动

php start.php start -d



停止

php start.php stop



重启

php start.php restart


平滑重启

php start.php reload


查看状态

php start.php status



debug 和 daemon 方式区别:


1、以 debug 方式启动,代码中 echo、var_dump、print 等打印函数会直接输出在终端。


2、以 daemon 方式启动,代码中 echo、var_dump、print 等打印会默认重定向到 /dev/null 文件,可以通过设置 Worker::$stdoutFile = '/your/path/file';

 来设置这个文件路径。


3、以 debug 方式启动,终端关闭后 workerman 会随之关闭并退出。


4、以 daemon 方式启动,终端关闭后 workerman 继续后台正常运行。


相关文章