用pm2管理一個(gè)或多個(gè)node.js應(yīng)用

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)的應(yī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)用。

查看應(yīng)用狀態(tài)
查看應(yīng)用狀態(tài)

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)更新。

watch模式
watch模式

從上圖可以看到,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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,695評(píng)論 19 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,323評(píng)論 25 708
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,286評(píng)論 6 342
  • 上一篇大概介紹了JWT的用法,實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的登錄注冊(cè)以及郵箱驗(yàn)證。而這一篇呢就負(fù)責(zé)把我們的項(xiàng)目部署到自己的服務(wù)器...
    sidiWang閱讀 10,561評(píng)論 2 48
  • 轉(zhuǎn)換開(kāi)始了。這是二十四小時(shí)周期的分隔時(shí)刻,整個(gè)世界開(kāi)始翻轉(zhuǎn),鋼筋磚塊合攏的聲音連成一片,像出了故障的流水線。高樓收...
    _加油_閱讀 206評(píng)論 0 0

友情鏈接更多精彩內(nèi)容