2015-08-16 45 views
1

Env .: Ubuntu上的Node.js,以编程方式使用PM2。将工作人员添加到PM2池。不要重新加载/重新启动现有工作人员

我已经在我的主代码中通过节点启动了带有3个实例的PM2。假设我使用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个运行实例。行为是相同的 -

更新 如果clusterfork不要紧。

更新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相当有限。缺乏添加更多工人的能力对我来说是一个难题。

我知道你可以在命令行上“缩放”如果你正在使用集群,但我不知道为什么你不能启动更多的实例,如果你正在使用fork。这个不成立。

+0

是的。如果你想拥有一个弹性的工作者池,扩展应该是你头脑中的第一件事,并且应该以编程方式完成,所以你可以编写代码来根据服务器负载做出决定。我会保持这个问题的公开...希望这将很快发布... – noderman

0

据我所知,PM2的所有命令也可以以编程方式使用,包括scale。查看CLI.js查看所有可用的方法。

尝试在应用程序声明中使用force属性。如果force是真实的,你可以(根据Application Declaration docs

顺便说一句,autorestarttrue默认启动相同的脚本几次,这通常不是由PM2不允许的。

相关问题