0.目標(biāo)
在《http-proxy反向代理以調(diào)度服務(wù)器各app》 中,我們談到了域名解析過來后應(yīng)用調(diào)度問題利花;除此之外释液,在部署了多個node.js應(yīng)用后,我們還會面臨多個應(yīng)用管理不方便已骇、需要來回切換命令行的窘境。
為了解決這個問題票编,我決定使用pm2來管理所有node.js應(yīng)用褪储。
1.安裝
安裝pm2很簡單,執(zhí)行下面指令即可:
npm install pm2@latest -g
注意慧域,-g
意味著這是一個全局的鲤竹,和 supervisor
、 express
一樣昔榴,在安裝完畢后辛藻,可以在全局使用該指令碘橘。另外,這里的 @latest
可以不寫吱肌。
2.用pm2啟動一個應(yīng)用
需要明白的是痘拆,pm2是一個全局的指令,我們可以在任何目錄中使用它岩榆。
舉個例子错负,我有三個應(yīng)用坟瓢,分別放在C盤的不同文件夾里:
C:\node1
C:\node2
C:\node3
那么勇边,我們就可以分別進(jìn)入這兩個目錄,并使用pm2來啟動這兩個應(yīng)用折联。注意到粒褒,我們啟動一個node應(yīng)用,一般是
node app.js
// 或
supervisor app.js
那么使用pm2诚镰,則分別進(jìn)入這三個應(yīng)用中奕坟,執(zhí)行下面命令:
pm2 start app.js
// 在Express中,會這么做
pm2 start bin/www
當(dāng)然清笨,作為追求高效便捷的程序員月杉,我們一定會想有沒有更快捷的方法,能不能寫個依賴文件直接自動配置抠艾。答案是苛萎,當(dāng)然有!不過检号,這部分內(nèi)容已經(jīng)屬于更高級的內(nèi)容腌歉,我不打算在這篇文章中寫出∑肟粒可以參考這里: Process File
3.pm2管理應(yīng)用
下面給出了一些主要的命令:
# Fork mode
$ pm2 start app.js --name my-api # Name process
# Cluster mode
$ pm2 start app.js -i 0 # Will start maximum processes with LB depending on available CPUs
$ pm2 start app.js -i max # Same as above, but deprecated yet.
# Listing
$ pm2 list # Display all processes status
$ pm2 jlist # Print process list in raw JSON
$ pm2 prettylist # Print process list in beautified JSON
$ pm2 describe 0 # Display all informations about a specific process
$ pm2 monit # Monitor all processes
# Logs
$ pm2 logs [--raw] # Display all processes logs in streaming
$ pm2 flush # Empty all log file
$ pm2 reloadLogs # Reload all logs
# Actions
$ pm2 stop all # Stop all processes
$ pm2 restart all # Restart all processes
$ pm2 reload all # Will 0s downtime reload (for NETWORKED apps)
$ pm2 gracefulReload all # Send exit message then reload (for networked apps)
$ pm2 stop 0 # Stop specific process id
$ pm2 restart 0 # Restart specific process id
$ pm2 delete 0 # Will remove process from pm2 list
$ pm2 delete all # Will remove all processes from pm2 list
# Misc
$ pm2 reset <process> # Reset meta data (restarted time...)
$ pm2 updatePM2 # Update in memory pm2
$ pm2 ping # Ensure pm2 daemon has been launched
$ pm2 sendSignal SIGUSR2 my-app # Send system signal to script
$ pm2 start app.js --no-daemon
$ pm2 start app.js --no-vizion
$ pm2 start app.js --no-autorestart
* 資料來源: http://pm2.keymetrics.io/docs/usage/quick-start/
3.1 用 pm2 list
來查看正在運(yùn)行的應(yīng)用名稱和id
先說說用pm2啟動了一個應(yīng)用后翘盖,我們能做什么。
使用 pm2 list
凹蜂,我們可以看到所有已經(jīng)啟動的應(yīng)用:

可以看到馍驯,我一共啟動了兩個應(yīng)用,其App name分別是onelib_node和www玛痊,其id分別為1和2汰瘫。
有了這兩個參數(shù),我們就可以分別對它們進(jìn)行進(jìn)一步的操作了卿啡。
3.2 用 pm2 logs
來查看應(yīng)用的記錄
使用這個命令后吟吝,我們可以查看所有記錄:

我們還可以用 pm2 flush
來清空所有的記錄。
3.3 用 pm2 describe id
來查看制定應(yīng)用的狀態(tài)
指令中的 id
即我們用pm2 list命令看到的應(yīng)用id颈娜,通過id來指定需要查看的應(yīng)用剑逃。

3.4 關(guān)閉浙宜、重啟應(yīng)用
要關(guān)閉所有的應(yīng)用,可以:
pm2 stop all
要重啟所有的應(yīng)用蛹磺,可以:
pm2 restart all
如果我們想要關(guān)閉某一個應(yīng)用粟瞬,只需要指定其id即可:
pm2 stop id
同樣地馍佑,如果我們想要重啟某一個應(yīng)用详炬,只需要指定其id即可:
pm2 restart id
3.5 刪除應(yīng)用
我們在關(guān)閉一個應(yīng)用后,使用 pm2 list
仍能查找到它咧党,顯示 stopped 狀態(tài)俗或。有時候市怎,我們要刪除某個應(yīng)用,并且不再希望看到它辛慰。這種情況区匠,我們可以使用刪除命令:
pm2 delete id
如果要刪除所有應(yīng)用,則:
pm2 delete all
4. 用 watch
模式啟動應(yīng)用
在之前的文章中帅腌,我介紹了supervisor在開發(fā)過程中的作用:我們在修改了代碼后驰弄,不需要重啟服務(wù)就能自動更新。
那么速客,作為更加強(qiáng)大的pm2戚篙,是否也能做得呢?答案是當(dāng)然可以溺职!
這需要我們在啟動服務(wù)的時候岔擂,在后面加上 --watch
來啟動監(jiān)控代碼是否變化。通過這種方式啟動的應(yīng)用辅愿,在其文件夾內(nèi)的文件有更改時智亮,會自動更新。

從上圖可以看到点待,watching參數(shù)已經(jīng)置為 enabled 了(原來是灰色的disabled )
需要特別注意的是:一旦使用 watch
模式啟動服務(wù)阔蛉,就不能再通過 pm2 stop id
來關(guān)閉它了。相應(yīng)的癞埠,我們也要加上 --watch
參數(shù):
pm2 stop --watch id
更多資料状原,請參考:http://pm2.keymetrics.io/docs/usage/watch-and-restart/
5.監(jiān)控服務(wù)
要查看開啟的應(yīng)用的運(yùn)行狀態(tài),可以使用這個命令:
pm2 monit
由于我實(shí)在沒法模擬得這么形象苗踪,只好從 PM2 盜個圖來了:

6.未完待續(xù)
pm2的功能遠(yuǎn)不止這些颠区,從它的官網(wǎng)上看,還有很多的高級功能等我們?nèi)ナ褂猛úT诤罄m(xù)的工作中毕莱,如果有更好的使用場景和方法,我仍然會在這里作出更新,以分享給大家朋截。
最后蛹稍,推薦大家多看看pm2的官網(wǎng),這里有更詳細(xì)的說明: http://pm2.keymetrics.io/
原創(chuàng)文章部服,未經(jīng)許可唆姐,請勿轉(zhuǎn)載
作者:Mike的讀書季
日期:2016.11.12
QQ:1139904786
網(wǎng)站:http://www.onelib.biz