Javascript 使用PM2的Nodejs应用程序的启动顺序
我正在使用命令Javascript 使用PM2的Nodejs应用程序的启动顺序,javascript,node.js,ubuntu,pm2,Javascript,Node.js,Ubuntu,Pm2,我正在使用命令pm2 start apps.json在一个命令中启动多个应用程序。这些应用在apps.json中定义: { "apps": [ { "name": "foo", "script": "./foo.js", }, { "name": "bar", "scrip
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.js
和baz.js
例如,
foo.js
can运行process.send('ready')
将其pm2状态更改为online
。只有这样,pm2才会启动bar.js
和baz.js
。这将类似于Docker Compose的depend_on
参数。仅通过配置文件无法完成此类操作,但PM2有一个允许您执行IPC(进程间通信)的接口
可使用以下方法:
列出正在运行的进程并获取其名称/idpm2.list
,用于将接收信息并做出相应反应的流程pm2.启动总线
用于将信息发送到另一个进程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));
最好的问候一点小技巧,你可以写:“start”:“pm2 start server.js&&pm2 start server1.js”
内包.json
。如果您将其作为npm start运行,它将运行start脚本,类似地,您可以创建脚本来停止它
如果没有,那么您也可以使用child_-process
[它默认与nodejs一起提供]通过childProcess.exec('pm2 start server.js&&pm2 start server1.js'),从脚本内部运行命令代码>有一些问题会影响可能的方法:1。他们的启动顺序是否同步。或异步。;2.它们是否暴露任何端口;3.它们是单例的吗?也就是说,假设每个系统中只有1个运行在单个系统上是否安全。