pomelo进程崩溃挂掉无法自动重启,重启单服务器(auto-restart) - 起点终站

我们应该感谢相遇,无论结局是喜是悲....
pomelo进程崩溃挂掉无法自动重启,重启单服务器(auto-restart)
  • 首页 > IT技术
  • 作者:起点终站
  • 2018年12月24日 14:58 星期一
  • 浏览:64077
  • 字号:
  • 评论:2
  • 当前2.2.5版本的pomelo还是有个bug,无法自动重启挂掉的进程(前提是在server.json配置文件里配置了自动重启auto-restart,如下图)

    QQ五笔截图未命名.jpg

    其实不是pomelo没有监控,而是有个小bug导致的无法准确监听进程


    在pomelo/lib/master/master.js文件下,当收到监听disconnect表示断开的时候,pomelo会再次检查端口状态,下图红框位置, 如果确认端口不存在则会重启服务器starter.run()

    1.jpg


    问题就出在了这个方法上,我们来看这个方法生成的命令

    4.jpg



    我这里随便找了个端口测试,以22端口为例子,看下图

    第一个是原生命令,第二个是修改后的命令,第三个是过滤出来的22端口

    2.jpg



    看出来了么,原生命令检测出来的结果是不准确的。。

    解决方案,在port前面加上3个冒号准确定位就可以了  :::

    修改前:

    cmd = util.format('ssh %s %s "netstat -an|awk \'{print $4}\'|grep %s|wc -l"', host, ssh_params, port);
    cmd = util.format('netstat -an|awk \'{print $4}\'|grep %s|wc -l', port);
      

    修改后:

    cmd = util.format('ssh %s %s "netstat -an|awk \'{print $4}\'|grep %s|wc -l"', host, ssh_params, ':::'+port);
    cmd = util.format('netstat -an|awk \'{print $4}\'|grep %s|wc -l', ':::'+port);
    


    接下来我们把代码上传,重启服务器后测试一下功能是否生效了

    项目完整启动,我这里把chat服务器手动杀死。kill -9 4558

    4.jpg


    在打开另一个screen查看log

    1.jpg


    自动重启成功啦


    这不止修复了进程崩溃挂掉不自动重启的bug,还附带了一个小好处,如果有修改某个服务器上的代码,直接kill掉相关的服务器进程,pmelo会自动重启该服务器,就不需要重启整个服务器了。

      您阅读这篇文章共花了:  
    本文作者:起点终站      文章标题: pomelo进程崩溃挂掉无法自动重启,重启单服务器(auto-restart)
    本文地址:https://blog.hellozwh.com/?post=421
    版权声明:若无注明,本文皆为“起点终站”原创,转载请保留文章出处。
    • blogger
    WordPress建站吧2018-12-25 23:08
    有种武侠和江湖的感觉
    起点终站 没错,我就是那个帅逼站长2018-12-26 08:52
    @WordPress建站吧:欢迎常来指导工作
    返回顶部| 首页| 手气不错| 网站地图| sitemap| 装逼生成器| 站长介绍|

    Copyright © 2016-2019 起点终站 闽ICP备16011094号-1