环境:Ubuntu上的Node.js,以编程方式使用PM2 .
我在主代码上通过Node启动了PM2和3个实例 . 假设我使用PM2命令行删除其中一个实例 . 我可以将另一名 Worker 加回到游泳池吗?这可以在不影响其他 Worker 操作的情况下完成吗?
我想我应该使用 start
方法:
pm2.start({
name : 'worker',
script : 'api/workers/worker.js', // Script to be run
exec_mode : 'cluster', // OR FORK
instances : 1, // Optional: Scale your app by 4
max_memory_restart : '100M', // Optional: Restart your app if it reaches 100Mo
autorestart : true
}, function(err, apps) {
pm2.disconnect();
});
但是,如果使用 pm2 monit
,您将看到重新启动了2个现有实例,并且未创建其他实例 . 结果仍然是2个正在运行的实例
update 如果 cluster
或 fork
- 行为相同并不重要 .
update 2 命令行具有 scale
选项(https://keymetrics.io/2015/03/26/pm2-clustering-made-easy/),但我在程序化API文档(https://github.com/Unitech/PM2/blob/master/ADVANCED_README.md#programmatic-api)上没有看到此方法 .
2 回答
我实际上认为这不能在PM2中完成,因为我有完全相同的问题 .
对不起,我认为解决方案是使用别的东西,因为PM2相当有限 . 缺乏增加 Worker 的能力对我来说是一个交易障碍 .
我知道如果你正在使用群集,你可以在命令行上“缩放”,但我不知道如果你使用fork,为什么你不能启动更多的实例 . 这没有道理 .
据我所知,PM2的所有命令也可以以编程方式使用,包括
scale
. 查看CLI.js以查看所有可用方法 .尝试在应用程序声明中使用
force
属性 . 如果force
为真,则可以多次启动相同的脚本,这通常是PM2不允许的(根据Application Declaration docs)顺便说一下,
autorestart
默认为true
.