swoole服务的重启方式

关于swoole服务的重启方式

一、程序内的自重启
1、$server->reload
安全地重启所有Worker/Task进程,确保正在执行的任务执行完成后才重启,master/manager进程不会停止。


bool Server->reload(bool $only_reload_taskworkrer = false)

$only_reload_taskworkrer 是否仅重启Task进程。
reload有保护机制,当一次reload正在进行时,收到新的重启信号会丢弃。

如果设置了user/group,Worker进程可能没有权限向Master进程发送信息,这种情况下必须使用root账户,在shell中执行kill指令进行
重启reload指令对addProcess添加的用户进程无效。

注意:平滑重启只对 onWorkerStart 或 onReceive 等在 Worker 进程中 include / require 的PHP文件有效,Server启动前就已经 include / require 的PHP文件,不能通过平滑重启重新加载。

对于Server的配置即$serv->set()中传入的参数设置,必须关闭/重启整个Server才可以重新加载。这就要求你能判断出,你修改的文件是在哪里被引入的,task / worker / master。

2、$server->stop()
停止Worker进程。默认是停止当前Worker进程。

3、$server->shutdown()
关闭服务器。
可在Worker进程内调用来关闭服务器,如果Worker进程内发生致命错误或者逻辑错误时可这样做。

客户端的连接是否会保持,取决于服务的运行模式:
SWOOLE_PROCESS:来自客户端的连接是由master进程管理,worker进程的重启和异常退出,不会影响连接本身。
SWOOLE_BASE:客户端连接直接维持在Worker进程中,因此reload时会切断所有连接。并且Base模式不支持reload Task进程。

二、外部重启程序
1、Server可以监听一个内网端口,然后可以接收远程的控制命令。

2、使用程序向进程发送指令。
比如,./server stop | restart | reload | status 等。一般我们在更新代码后需要restart / reload。
实现方式是,在启动服务后,将master和manager进程id保存到文件pid_file。然后使用
\Swoole\Process::kill($pid, $signo = SIGTERM) 方法来向master / manager进程发送信号。

信号:

0:可以检测进程是否存在,不会发送信号。
SIGTERM: 向主进程/管理进程发送此信号服务器将安全终止。
SIGUSR1: 向主进程/管理进程发送SIGUSR1信号,将平稳地重启所有Worker进程。
SIGUSR2: 向主进程/管理进程发送SIGUSR2信号,将平稳地重启所有Task进程。
SIGKILL:强制杀死进程,类似于 kill -9 xxx 。适用于 强制停止/强制重启 服务。
status
    1、判断 pid_file 中是否保存了masterPid, managerPid。
    2、然后判断managerPid是否存在,\Swoole\Process::kill(managerPid, 0)。
    因为manager进程存在,则master进程也存在。

stop
    1、先判断status。
    2、如果是强制关闭服务,使用kill -9 masterPid 或者 \Swoole\Process::kill(masterPid, SIGKILL)3、如果是平滑关闭服务:\Swoole\Process::kill(masterPid, SIGTERM); 
    此种方式会等待任务处理完才关闭服务,因此需要while循环来判断masterPid是否
    存在 \Swoole\Process::kill(masterPid, 0) 直到master进程不存在才说明停止成功了。
    4、然后删除pid_file文件。

reload平滑重启
    先判断status。
    向managerPid发送 SIGUSR1 指令:\Swoole\Process::kill(managerPid, SIGUSR1)。

restart重启
    先判断status。
    调用stop指令。
    调用start指令。

3、使用kill命令向进行发送信号

kill -信号ID 进程ID
例如,发送 SIGTERM 信号
kill -15 6444

信号参考
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值