0.目標(biāo)
在《http-proxy反向代理以調(diào)度服務(wù)器各app》 中,我們談到了域名解析過(guò)來(lái)后應(yīng)用調(diào)度問(wèn)題;除此之外,在部署了多個(gè)node.js應(yīng)用后,我們還會(huì)面臨多個(gè)應(yīng)用管理不方便、需要來(lái)回切換命令行的窘境。
為了解決這個(gè)問(wèn)題,我決定使用pm2來(lái)管理所有node.js應(yīng)用。
1.安裝
安裝pm2很簡(jiǎn)單,執(zhí)行下面指令即可:
npm install pm2@latest -g
注意,-g 意味著這是一個(gè)全局的,和 supervisor 、 express 一樣,在安裝完畢后,可以在全局使用該指令。另外,這里的 @latest 可以不寫(xiě)。
2.用pm2啟動(dòng)一個(gè)應(yīng)用
需要明白的是,pm2是一個(gè)全局的指令,我們可以在任何目錄中使用它。
舉個(gè)例子,我有三個(gè)應(yīng)用,分別放在C盤(pán)的不同文件夾里:
C:\node1
C:\node2
C:\node3
那么,我們就可以分別進(jìn)入這兩個(gè)目錄,并使用pm2來(lái)啟動(dòng)這兩個(gè)應(yīng)用。注意到,我們啟動(dòng)一個(gè)node應(yīng)用,一般是
node app.js
// 或
supervisor app.js
那么使用pm2,則分別進(jìn)入這三個(gè)應(yīng)用中,執(zhí)行下面命令:
pm2 start app.js
// 在Express中,會(huì)這么做
pm2 start bin/www
當(dāng)然,作為追求高效便捷的程序員,我們一定會(huì)想有沒(méi)有更快捷的方法,能不能寫(xiě)個(gè)依賴文件直接自動(dòng)配置。答案是,當(dāng)然有!不過(guò),這部分內(nèi)容已經(jīng)屬于更高級(jí)的內(nèi)容,我不打算在這篇文章中寫(xiě)出??梢詤⒖歼@里: 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
* 資料來(lái)源: http://pm2.keymetrics.io/docs/usage/quick-start/
3.1 用 pm2 list 來(lái)查看正在運(yùn)行的應(yīng)用名稱和id
先說(shuō)說(shuō)用pm2啟動(dòng)了一個(gè)應(yīng)用后,我們能做什么。
使用 pm2 list,我們可以看到所有已經(jīng)啟動(dòng)的應(yīng)用:

可以看到,我一共啟動(dòng)了兩個(gè)應(yīng)用,其App name分別是onelib_node和www,其id分別為1和2。
有了這兩個(gè)參數(shù),我們就可以分別對(duì)它們進(jìn)行進(jìn)一步的操作了。
3.2 用 pm2 logs 來(lái)查看應(yīng)用的記錄
使用這個(gè)命令后,我們可以查看所有記錄:

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

3.4 關(guān)閉、重啟應(yīng)用
要關(guān)閉所有的應(yīng)用,可以:
pm2 stop all
要重啟所有的應(yīng)用,可以:
pm2 restart all
如果我們想要關(guān)閉某一個(gè)應(yīng)用,只需要指定其id即可:
pm2 stop id
同樣地,如果我們想要重啟某一個(gè)應(yīng)用,只需要指定其id即可:
pm2 restart id
3.5 刪除應(yīng)用
我們?cè)陉P(guān)閉一個(gè)應(yīng)用后,使用 pm2 list 仍能查找到它,顯示 stopped 狀態(tài)。有時(shí)候,我們要?jiǎng)h除某個(gè)應(yīng)用,并且不再希望看到它。這種情況,我們可以使用刪除命令:
pm2 delete id
如果要?jiǎng)h除所有應(yīng)用,則:
pm2 delete all
4. 用 watch模式啟動(dòng)應(yīng)用
在之前的文章中,我介紹了supervisor在開(kāi)發(fā)過(guò)程中的作用:我們?cè)谛薷牧舜a后,不需要重啟服務(wù)就能自動(dòng)更新。
那么,作為更加強(qiáng)大的pm2,是否也能做得呢?答案是當(dāng)然可以!
這需要我們?cè)趩?dòng)服務(wù)的時(shí)候,在后面加上 --watch 來(lái)啟動(dòng)監(jiān)控代碼是否變化。通過(guò)這種方式啟動(dòng)的應(yīng)用,在其文件夾內(nèi)的文件有更改時(shí),會(huì)自動(dòng)更新。

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

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