企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持知识库和私有化部署方案 广告
# swoole_server->reload 重启所有worker进程。 ~~~ bool swoole_server->reload() ~~~ 一台繁忙的后端服务器随时都在处理请求,如果管理员通过kill进程方式来终止/重启服务器程序,可能导致刚好代码执行到一半终止。这种情况下会产生数据的不一致。如交易系统中,支付逻辑的下一段是发货,假设在支付逻辑之后进程被终止了。会导致用户支付了货币,但并没有发货,后果非常严重。 Swoole提供了柔性终止/重启的机制,管理员只需要向SwooleServer发送特定的信号,Server的worker进程可以安全的结束。 - SIGTERM: 向主进程发送此信号服务器将安全终止 - 在PHP代码中可以调用$serv->shutdown()完成此操作 - SIGUSR1: 向管理进程发送SIGUSR1信号,将平稳地restart所有worker进程 - 在PHP代码中可以调用$serv->reload()完成此操作 - swoole的reload有保护机制,当一次reload正在进行时,收到新的重启信号会丢弃 ~~~ #重启所有worker进程 kill -USR1 主进程PID ~~~ 1.7.7版本增加了仅重启task_worker的功能。只需向服务器发送SIGUSR2即可。 ~~~ #仅重启task进程 kill -USR2 主进程PID ~~~ > 平滑重启只对onWorkerStart或onReceive等在Worker进程中include/require的PHP文件有效,Server启动前就已经include/require的PHP文件,不能通过平滑重启重新加载 对于Server的配置即$serv->set()中传入的参数设置,必须关闭/重启整个Server才可以重新加载 Server可以监听一个内网端口,然后可以接收远程的控制命令,去重启所有worker ### 参考 - [附录:Linux信号列表](#) |  Swoole流程 | |-----| ![](https://box.kancloud.cn/2015-07-20_55aca2b1a0e06.)