【问题标题】:Startup Sequence of Nodejs Apps using PM2使用 PM2 的 Nodejs 应用程序的启动顺序
【发布时间】:2020-10-15 11:32:14
【问题描述】:

我正在使用命令pm2 start apps.json 在一个命令中启动多个应用程序。这些应用在apps.json中定义:

{
  "apps": [
    {
      "name": "foo",
      "script": "./foo.js",
    },
    {
      "name": "bar",
      "script": "./bar.js",
    },
    {
      "name": "baz",
      "script": "./baz.js",
    }
  ]
}

问题:是否可以定义启动顺序,使得foo.js必须先完成启动,然后bar.jsbaz.js才能启动?

例如,foo.js 可以通过 perform a graceful start,运行 process.send('ready') 将其 pm2 状态更改为 online。只有这样bar.jsbaz.js 才会被pm2 启动。这将类似于 Docker Compose 的 depend_on 参数。

【问题讨论】:

  • 有一些问题会影响可能的方法: 1. 它们的启动顺序是否同步。或异步。 2. 他们是否暴露了任何端口; 3. 它们是单例的吗,也就是说,是否可以安全地假设每个系统中只有 1 个将在单个系统上运行。

标签: javascript node.js ubuntu pm2


【解决方案1】:

不能只通过配置文件来做这样的事情,但是 PM2 有一个programmatic api 允许您执行IPC(进程间通信)。

以下方法可以使用:

  • pm2.list 列出正在运行的进程并获取它们的名称/ID
  • pm2.launchBus 对于将接收信息并做出反应的进程
  • pm2.sendDataToProcessId 用于发送信息到另一个进程

这样您可以运行多个脚本并让一个等待另一个。一旦脚本在 消息总线 上收到一条消息,它就可以使用pm2.start

启动一个进程

这里有一段伪代码来说明我的观点:

const pm2 = require('pm2');

pm2.connect(() => {
  pm2.list(function(err, processes) {
    const fooProcess = processes.find(p => p.name == 'foo');

    pm2.launchBus((err, bus) => {
      bus.on('process:msg', packet => {
        if (packet.startBar === true) {
          pm.start({ script: 'bar.js' }, (err, apps) => { ... })
        }
      });
      bus.on('error', console.error);
    });
  });
});

在另一个脚本中,您将拥有以下内容:

pm2.sendDataToProcessId(barProcessID, {
  data : { startBar : true },
  topic: 'process:msg'
}, (err, res) => console.log(err, res));

最好的问候

【讨论】:

    【解决方案2】:

    小技巧,你可以写:"start": "pm2 start server.js && pm2 start server1.js"package.json 里面。如果你将它作为 npm start 运行,它将运行启动脚本,同样,你可以创建脚本来停止它。

    如果没有,那么您也可以使用 child_process [它默认与 nodejs 一起使用] 使用 childProcess.exec('pm2 start server.js && pm2 start server1.js'); 从脚本内部运行命令

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-15
      • 2015-05-18
      • 1970-01-01
      • 2016-10-11
      • 1970-01-01
      • 2016-02-11
      • 2015-12-04
      • 2016-01-16
      相关资源
      最近更新 更多