2015-08-16 112 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不允許的。

相關問題