Env。:Ubuntu上的Node.js,以编程方式使用PM2。
我在主代码上通过Node启动了PM2和3个实例。假设我使用PM2命令行删除其中一个实例。我可以将另一名工人加回到游泳池吗?这可以在不影响其他工人操作的情况下完成吗?
我想我应该使用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个正在运行的实例。
更新
cluster
或fork
- 行为是否相同无关紧要。
更新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 )。
答案 0 :(得分:2)
我实际上认为这不能在PM2中完成,因为我有完全相同的问题。
我很抱歉,但我认为解决方案是使用其他东西,因为PM2相当有限。缺乏增加工人的能力对我来说是一个交易障碍。
我知道如果你正在使用群集,你可以在命令行上“缩放”,但是如果你使用fork,我不知道为什么你不能启动更多的实例。这毫无意义。
答案 1 :(得分:0)
据我所知,PM2的所有命令也可以通过编程方式使用,包括scale
。查看CLI.js以查看所有可用的方法。
尝试在应用程序声明中使用force
属性。如果force
为真,您可以多次启动相同的脚本,这通常是PM2不允许的(根据Application Declaration
docs)
顺便说一句,autorestart
默认为true
。