V2EX 首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Node.js
Express
PPA for Ubuntu
ppa:chris-lea/node.js
V2EX  ›  Node.js

请教一个 PM2 自动重启问题

  •  
  •   imherer · 243 天前 · 513 次点击
    这是一个创建于 243 天前的主题,其中的信息可能已经有所发展或是发生改变。

    cluster模式启动 node 进程,配置文件如下

    {
      "apps" : [{    
                   "name"        	   : "web",
                    "script"      	   : "./GServer/WebServer/app.js",
                    "merge_logs"  	   : true,    
                    "log_date_format"  : "YYYY-MM-DD HH:mm Z",
    		"error_file"       : "/home/ubuntu/.pm2/logs/web-err.log",
    		"out_file"         : "/home/ubuntu/.pm2/logs/web.log",
    		"max_restarts"     : 15,
    		"max_memory_restart": "1000M", 	
    		"exec_mode"        : "cluster",
    		"autorestart"      : true
      }]
    }
    

    当执行pm2 restart web或 watch 导致进程 restart 之后,pm2 list命令查看类别的时候,web进程的statusonline,同时 restart 次数也+1 了,但是这时候程序无法访问,包括在本机上直接curl 127.0.0.1:1337也无法访问( 1337 为我 node 监听的 port ).

    下面是日志:

    刚启动 node 进程的时候:

    pm2 list命令:

    ┌──────────┬────┬─────────┬───────┬────────┬─────────┬────────┬─────┬───────────┬──────────┐
    │ App name │ id │ mode    │ pid   │ status │ restart │ uptime │ cpu │ mem       │ watching │
    ├──────────┼────┼─────────┼───────┼────────┼─────────┼────────┼─────┼───────────┼──────────┤
    │ web  │ 0  │ cluster │ 30986 │ online │ 0       │ 1s    │ 0%  │ 81.7 MB   │ disabled │
    └──────────┴────┴─────────┴───────┴────────┴─────────┴────────┴─────┴───────────┴──────────┘
    

    web.log文件:

    2017-03-20 20:26 +09:00: [2017-03-20 20:26:01.921] [INFO] logger -  [ DotaServer <-> appDota.js ] : version = 0.3.8.2017320 , port = 1337
    2017-03-20 20:26 +09:00: [2017-03-20 20:26:01.924] [INFO] console - [info]-- [ DotaServer <-> appDota.js ] : version = 0.3.8.2017320 , port = 1337
    

    web-error.log文件:无内容

    pm2.log文件:

    2017-03-20 20:25:58: [Watch] Start watching 0
    2017-03-20 20:25:58: Starting execution sequence in -cluster mode- for app name:web id:0
    

    接下来为了方便观察,我把所有日志都清空,然后执行pm2 restart web,让进程重启一次。

    pm2 list命令:

    ┌──────────┬────┬─────────┬───────┬────────┬─────────┬────────┬─────┬───────────┬──────────┐
    │ App name │ id │ mode    │ pid   │ status │ restart │ uptime │ cpu │ mem       │ watching │
    ├──────────┼────┼─────────┼───────┼────────┼─────────┼────────┼─────┼───────────┼──────────┤
    │ web  │ 0  │ cluster │ 30986 │ online │ 1       │ 1m    │ 0%  │ 81.7 MB   │ disabled │
    └──────────┴────┴─────────┴───────┴────────┴─────────┴────────┴─────┴───────────┴──────────┘
    

    虽然状态是online,但实际上 node 程序却不能访问

    web.log文件:

    2017-03-20 20:31 +09:00: [2017-03-20 20:31:40.636] [INFO] logger -  [ DotaServer <-> appDota.js ] : version = 0.3.8.2017320 , port = 1337
    2017-03-20 20:31 +09:00: [2017-03-20 20:31:40.638] [INFO] console - [info]-- [ DotaServer <-> appDota.js ] : version = 0.3.8.2017320 , port = 1337
    

    web-error.log文件:无内容

    pm2.log文件:

    2017-03-20 20:31:39: Stopping app:gs id:0
    2017-03-20 20:31:39: App name:gs id:0 disconnected
    2017-03-20 20:31:39: App [gs] with id [0] and pid [30986], exited with code [130] via signal [SIGINT]
    2017-03-20 20:31:39: pid=26821 msg=process killed
    2017-03-20 20:31:39: Starting execution sequence in -cluster mode- for app name:gs id:0
    2017-03-20 20:31:39: App name:gs id:0 online
    

    另外我如果用fork模式启动则完全没这个问题, restart 之后程序都能正常访问。主要是fork模式错误日志会计入 web.log 文件而不是 web-error.log 文件,这样非常不方便调试,所以我想用cluster模式。 另外我试过了 pm2 的 1.x 版本和 2.4.x 版本都是一样的结果。

    3 回复  |  直到 2017-03-21 14:54:05 +08:00
        1
    keller   243 天前
    pm2 用了好久也没发现这个问题
    你可以添加多个 测试用例 看看是 pm2 问题还是你对应 app 有问题
        2
    fds   243 天前
    在 app.js 里 server.on "listening" 打印个 log ,看看是否确实启动了
        3
    imherer   243 天前
    @keller
    @fds
    解决了,发现是 node 版本太低了,应该是低版本没支持吧,换了高版本没问题了
    DigitalOcean
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   鸣谢   ·   934 人在线   最高记录 3541   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.0 · 55ms · UTC 00:00 · PVG 08:00 · LAX 16:00 · JFK 19:00
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1