是一個守護進程管理器,它(ta)將幫(bang)助(zhu)您管理和保持您的應用程序(xu)在線(xian)。PM2 入門非常簡(jian)單(dan),它(ta)以簡(jian)單(dan)直(zhi)觀的 CLI 形式提供
最(zui)新的 PM2 版(ban)本可(ke)通過 NPM 或 Yarn 安裝
$ npm install pm2@latest -g
或者
$ yarn global add pm2
啟(qi)動、守(shou)護進程(cheng)(cheng)和(he)監視應用程(cheng)(cheng)序的最簡單(dan)方(fang)法是使用此(ci)命令(ling)行
$ pm2 start app.js
或者輕松啟動任(ren)何其他應用程序
$ pm2 start bashscript.sh
$ pm2 start python-app.py --watch
$ pm2 start binary-file -- --port 1520
指定應用名稱
--name <app_name>
文件更改時監視并(bing)重新啟動(dong)應用程序(xu)
--watch
設(she)置應用重新加(jia)載的(de)內存閾值(zhi)
--max-memory-restart <200MB>
指定日志文件
--log <log_path>
將額外的參數傳遞(di)給腳本
-- arg1 arg2 arg3
自動重啟之間的延遲
--restart-delay <delay in ms>
帶時間的前綴日志
--time
不要自動重啟應用程序
--no-autorestart
指定 cron 強制(zhi)重啟
--cron <cron_pattern>
附加到應用程序日志
--no-daemon
管(guan)理應用程序狀態很簡單,這里是(shi)命令
$ pm2 restart app_name
$ pm2 reload app_name
$ pm2 stop app_name
$ pm2 delete app_name
all
作用于所有進程id
作用于特定的進程 ID現在您(nin)已(yi)經啟動了這個應用程(cheng)序(xu),您(nin)可以檢查它的狀態、日志、指標,甚至可以使用 獲取在線儀(yi)表板
列出PM2管理的所(suo)有應用的狀態
$ pm2 [list|ls|status]
實時顯示日志
$ pm2 logs
挖掘舊日志
$ pm2 logs --lines 200
這是一個直接適合您的終(zhong)端的實(shi)時儀(yi)表板
$ pm2 monit
基(ji)于 Web 的儀(yi)表板(ban),具(ju)有(you)診斷系統的跨服務(wu)器
$ pm2 plus
對于 Node.js 應用程(cheng)序,PM2 包(bao)括一個自動(dong)負載均衡器,它將在每個衍生進程(cheng)之(zhi)間(jian)共享所有 HTTP[s]/Websocket/TCP/UDP 連接(jie)
以集群模(mo)式啟(qi)動應用(yong)程序
$ pm2 start app.js -i max
在(zai) 閱讀有關集(ji)群模式的更多信息
您還可以創建一個(ge)稱為生態(tai)系(xi)(xi)統(tong)文件的配置文件來管理多個(ge)應(ying)用程序。生成生態(tai)系(xi)(xi)統(tong)文件
$ pm2 ecosystem
這將生成一個 ecosystem.config.js
文件
module.exports = {
apps : [{
name: "app",
script: "./app.js",
env: {
NODE_ENV: "development",
},
env_production: {
NODE_ENV: "production",
}
}, {
name: 'worker',
script: 'worker.js'
}]
}
并輕松啟動
$ pm2 start ecosystem.config.js
在(zai) 閱讀有關應用程序聲明的更多信息
使用您在服務器(qi)啟動/重(zhong)新(xin)啟動時(shi)管理的(de)進程重(zhong)新(xin)啟動 PM2 至關重(zhong)要。為了解決這個問題,只(zhi)需運行這個命令(ling)來生成一個活動的(de)啟動腳(jiao)本
$ pm2 save
在 閱讀有關啟(qi)動(dong)腳本(ben)生成器的更多(duo)信息
使用 --watch
選項非常簡單
$ cd /path/to/my/app
$ pm2 start env.js --watch --ignore-watch="node_modules"
這將在當前目錄 +
所有子文件夾中的任何文件更改時監視并重新啟動應用程序,并且它將忽略 node_modules
文件夾中的任何更改 --ignore-watch="node_modules"
。
$ pm2 logs
然后,您可以(yi)使用(yong)上面命令來檢查重新啟動(dong)的應用(yong)程序日志。
以下(xia)是一些值得(de)了解的命(ming)令。 只需使用示例(li)應用程序或(huo)開(kai)發機器(qi)上當前的 Web 應用程序來(lai)嘗試它(ta)們
$ pm2 start app.js --name my-api # 名稱進(jin)程
$ pm2 start app.js -i 0 # 將根據可用(yong)的 CPU 使用(yong) LB 啟(qi)動最大(da)進程(cheng)
$ pm2 start app.js -i max # 與(yu)上面相同,但(dan)已(yi)棄用。
$ pm2 scale app +3 # 將 `app` 增加 3 名工人
$ pm2 scale app 2 # 將 `app` 向上(shang)或向下擴展(zhan)到總(zong)共 2 個工(gong)人
$ pm2 list # 顯(xian)示所有進(jin)程狀態
$ pm2 jlist # 以原始 JSON 格(ge)式打印(yin)進(jin)程列表
$ pm2 prettylist # 以美化JSON打印進(jin)程列表
$ pm2 describe 0 # 顯示(shi)有關特定(ding)進程的(de)所有信息(xi)
$ pm2 monit # 監控所(suo)有進程
$ pm2 logs [--raw] # 在(zai)流中顯示所有進程(cheng)日(ri)志
$ pm2 flush # 清(qing)空所有日志文件
$ pm2 reloadLogs # 重(zhong)新加(jia)載所(suo)有日(ri)志
$ pm2 stop all # 停止(zhi)所有進(jin)程
$ pm2 restart all # 重(zhong)啟所有進程
$ pm2 reload all # 將 0s 停機(ji)時間(jian)重(zhong)新加(jia)載(對(dui)于 NETWORKED 應用程序)
$ pm2 stop 0 # 停止特定(ding)進程 ID
$ pm2 restart 0 # 重啟特定進程(cheng)id
$ pm2 delete 0 # 將從 pm2 列表(biao)中刪(shan)除進程
$ pm2 delete all # 將從 pm2 列表中刪除所有進程(cheng)
$ pm2 reset <process> # 重(zhong)置元數據(ju)(重(zhong)啟時間...)
$ pm2 updatePM2 # 更新內存 pm2
$ pm2 ping # 確保 pm2 守護(hu)進程已經(jing)啟動(dong)
$ pm2 sendSignal SIGUSR2 my-app # 向腳本發(fa)送系統信號
$ pm2 start app.js --no-daemon
$ pm2 start app.js --no-vizion
$ pm2 start app.js --no-autorestart
我(wo)們讓它變得簡單(dan),版本之間沒有重大變化,過程很(hen)簡單(dan)
$ npm install pm2@latest -g
然后更新內存中的PM2
$ pm2 update