swoole中 swoole_set_process_name() 函数可以设置为进程设置名称,
再通过 pidof 命令获取其pid,有了pid就可以通过 kill -10 pid 平滑重启服务。
class WebsocketServer
{
const HOST = '0.0.0.0';
const PROT = '9510';
public $ws = null;
public function __construct()
{
$this->ws = new Swoole\Websocket\Server(self::HOST, self::PROT);
// 其他方法已省略
// 加载start方法
$this->ws->on('start', [$this, 'onStart']);
$this->ws->on('workerStart', [$this, 'onWorkerStart']);
$this->ws->start();
}
/**
* 启动后在主进程(master)的主线程回调此函数
* @param $server
*/
public function onStart($server)
{
// 设置进程的名称
swoole_set_process_name('ws_master');
}
}
new WebsocketServer();
通过上面的代码,就可以为websocket进程设置名称为 ws_master,然后再编写一个shell脚本 reload.sh,进行对服务的平滑重启,代码如下:
echo 'loading...'
pid=`pidof ws_master`
echo $pid
# 平滑重启服务 -10 == -USR1
kill -10 $pid
echo 'success'
运行 sh reload.sh 就可以对服务进行平滑重启了。
当然,直接在命令行中运行 kill -10 pid 同样可以达到平滑重启的效果。