守护进程、信号和平滑重启[通俗易懂]

守护进程、信号和平滑重启

大家好,又见面了,我是全栈君。

守护进程

swoole官方也为我们提供了配置选项daemonize(默认未启用),若要开启守护进程,daemonize设置为true即可,这样就可以不受终端控制,在后台运行。
配置为守护进程后,所有的标准输出将失效,如果要调试,可以配置log_file,所有的标准输出统统记载到该文件中。

平滑重启

swoole是常驻内存的,若想让修改后的代码生效,就必须Ctrl+C,然后再重启server。对于守护进程化的server呢?则需kill掉后,再重启。
事实上,swoole进程刚好处理了一半的数据,此时被kill,就特别容易出现问题。
swoole为我们提供了平滑重启机制,我们只需要向swoole_server的主进程发送特定的信号,即可完成对server的重启。

平滑重启包含的信号

  1. SIGTERM,一种优雅的终止信号,会待进程执行完当前程序之后中断,而不是直接干掉进程

  2. SIGUSR1,将平稳的重启所有的Worker进程

  3. SIGUSR2,将平稳的重启所有的Task进程

pstree | grep server_process #找出主进程
kill -TERM 55559 #优雅终止主进程
kill -USR1 55559 #热重启worker进程,onWorkerStart回调之后加载的文件,重启才有意义
kill -USR2 55559 #热重启task进程,onTask回调之后加载的文件,重启才有意义

要加载的文件 (Person.php)

~~~
class Person
{
    public $name = '';
    public function __toString(){
        return "~~___".$this->name."___";
    }
}
~~~

server 热重启代码

~~~
$serv = new swoole_server('127.0.0.1', 9501);

// 配置为守护进程方式,以及log调试日志
$serv->set([
    'worker_num' => 1,
    'daemonize' => true,
    'log_file' => __DIR__ . '/server.log',
]);

$serv->on('Connect', function ($serv, $fd) {
    echo "new client connected." . PHP_EOL;
});

$serv->on('Receive', function ($serv, $fd, $fromId, $data) {
    echo "worker received data: {$data} from ". PHP_EOL;
});

$serv->on('WorkerStart', function ($serv, $workerId) {    
    //onWorkerStart之后加载的文件,如果该文件有改动,则可以热重启
    require_once ('Person.php');
    $p = new Person();
    $p->name = 'wangkun';
    echo $p;
});

$serv->start();
~~~

守护进程、信号和平滑重启[通俗易懂]

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/111877.html原文链接:https://javaforall.net

(0)
上一篇 2022年2月13日 下午5:00
下一篇 2022年2月13日 下午5:00


相关推荐

  • pycharm卸载不干净导致新安装的pycharm无法打开的问题

    pycharm卸载不干净导致新安装的pycharm无法打开的问题个人的经历 之前下载的 pycharm 版本不合适 就直接把下载目录的所有文件直接删了 所以显而易见的没有卸载完全 桌面快捷方式都还在 再下新版本的 pycharm 之后 图省事 把新的也安在了旧的相同的目录下 结果安装完成后无论怎么点击 exe 文件 都打不开 上网查询后发现是没卸载干净 但是网上各种经验看的我眼晕 我就自己试了一下 没想到还成功了 解决方法 我打开新安装的 pycharm 的 bin 目录下的 uninstall exe 两个选项全勾 卸载干净了新下的这个之后 因

    2026年3月27日
    2
  • 使用Taiko + Gauge进行自动化测试(一)

    使用Taiko + Gauge进行自动化测试(一)初识 Taiko 先来了解一下什么是 Taiko Taiko 是一个免费的开源浏览器自动化工具 由 ThoughtWorks 开发 它是一个 node 的库 Taiko 使用 ChromeDevtoo 它是为测试现代 web 应用程序而构建的 所以对于 Taiko 来说 1 它是为测试 Web 应用而生 2 它基于 Chrome 浏览器关于 Taiko 简介中所提到的 ThoughtWorks 如果有不了解的同学

    2026年3月17日
    3
  • MySQL重设密码_mysql重置密码命令

    MySQL重设密码_mysql重置密码命令1.首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL数据库。因为在重新设置MySQL的root密码的期间,MySQL数据库完全出于没有密码保护的状态下,其他的用户也可以任意地登录和修改MySQL的信息。可以采用将MySQL对外的端口封闭,并且停止Apache以及所有的用户进程的方法实现服务器的准安全状态。最安全的状态是到服务器的Console上面操作,并且拔掉网线。2.修改MyS…

    2022年10月16日
    3
  • 杂谈 – 自定义搜索引擎

    杂谈 – 自定义搜索引擎在Firefox上,以{肯定被驳回}搜索引擎为例。{肯定被驳回}搜索引擎搜索英文关键词时,给出的也基本是英文,例如这样:看了几篇不符合自己的胃口,遂点击了左上角小提示:仅限简体中文结果,例如这样:发现第二篇就是自己想要的东西,遂想,中文的结果也不错,何不设置不管中英文关键字,都先输出中文呢?所以实现方式,就是:添加addcustomsearchengine。2.点击扩展图标其中,SearchURL为:为了避免被驳回,请自行输入。然后点击蓝色按钮。然后在Firefox的

    2022年7月13日
    24
  • javaweb-爬虫-3-64

    javaweb-爬虫-3-64

    2021年5月18日
    148
  • linux mysql 监听端口被占用_Linux 查询端口被占用命令[通俗易懂]

    linux中如何查看某个端口是否被占用之前查询端口是否被占用一直搞不明白,问了好多人,终于搞懂了,现在总结下:1.netstat-anp|grep端口号如下,我以3306为例,netstat-anp|grep3306(此处备注下,我是以普通用户操作,故加上了sudo,如果是以root用户操作,不用加sudo即可查看),如下图1:图1图1中主要看监控状态为LISTEN表示已…

    2022年4月11日
    56

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号