deploy/redeploy 后获取 PM2 应用程序的正确状态

get correct status of PM2 application after deploy/redeploy

我正在尝试使用 PM2 进行部署,因此在我的部署过程结束时我会这样做

pm2 startOrReload staging.json --env preprod  

我明白了:

16:26:12 ‘staging/current’ -> ‘/srv/pb/dev/v0.0.6-85-g755a611’
16:26:12 [PM2] Applying action reloadProcessId on app [pb1](ids: 0)
16:26:13 [PM2] [pb1](0) ✓
16:26:13 ┌──────────┬────┬──────┬───────┬────────┬─────────┬────────┬─────────────┬──────────┐
16:26:13 │ App name │ id │ mode │ pid   │ status │ restart │ uptime │ memory      │ watching │
16:26:13 ├──────────┼────┼──────┼───────┼────────┼─────────┼────────┼─────────────┼──────────┤
16:26:13 │ pb1      │ 0  │ fork │ 30180 │ online │ 111     │ 0s     │ 19.805 MB   │  enabled │
16:26:13 └──────────┴────┴──────┴───────┴────────┴─────────┴────────┴─────────────┴──────────┘  

如您所见,无论部署是否成功,状态都是在线
并在不成功时将 Jenkins 构建标记为成功。之后如果你做

pm2 list  

你得到正确的状态离线

那么有没有办法通过 API 或其他方式获得正确的状态,以便我可以将构建标记为失败

1) 您可以从 CLI 获取 JSON 格式的当前状态:

pm2 jlist
pm2 prettylist

2) 或者您可以通过编程方式连接到 pm2 实例:

var pm2 = require('pm2');

pm2.connect( function(err) {
  if (err) process.exit();

  pm2.list( function(err,list) {
    list.forEach( function(e) {
      console.log( e.name, e.pm2_env.status );
    });
    pm2.disconnect();
  });

});

3) 或者您可以使用 keymetrics monitoring.