Node 是一個可以在伺服器端執行 JavaScript 的環境,作為一個由前端開發步入後端開發,轉變為全棧開發的首選後端語言,相信大家都已經非常的熟悉了。現在有很多專案都會選擇 Node 來作為後端開發,初出茅廬的兄弟們都想擼起袖子加油幹,其中的坑不少,彎彎也不少,但是最終也還是都能解決。在這些問題當中,也許大家都會遇到這麼個問題。開發中,可以直接在終端裡執行伺服器,然後一直掛著。開發完了,再閉關伺服器即可。而專案上線的話,一般是部署在 Linux 系統上,並且是一直都能訪問的,如果依舊採用開發環境的方式執行專案,就不能關閉終端,或者閉關自己的電腦,不然伺服器就不能訪問了,很顯然不可能一直開機掛著終端吧。
其實作為後端出身的一看就知道是怎麼回事了,這就是一個程序守護的問題。Node 的解決方案可以使用 Forever 模組來守護程序、監聽程式的執行,而今天給大家介紹另一個更加強大的程序管理工具 pm2,該工具除了可以管理 Node 程序外,還能進行效能監控、自動重啟和負載均衡,關鍵是使用上還非常的簡單。
安裝進入系統後,直接全域性下安裝該工具(前提是已經安裝過 Node了):
npm i -g pm2
常用命令
資訊展示
# 列出所有pm2執行的所有程式pm2 list# 顯示所有應用程式的 CPU 和記憶體佔用情況(ctrl +c 退出)pm2 monit# 顯示當前應用程式所有資訊pm2 show appName
啟動程式
# 進入專案目錄後# 如果是 express 專案,實際啟動檔案是 `./bin/www` # 啟動2個程序,兩個程序之間會自動進行負載均衡,並且監聽檔案變化pm2 start ./bin/www --watch -i 2
引數說明:
--watch 監聽檔案變化,有變化就會自動重啟-i 啟用多少個例項,用於負載均衡的,可設定為 -i 0 或者 -i max 來根據裝置的核數開啟例項數目-x 用 fork 模式啟動-n 設定應用名稱,方便檢視該應用-o 設定標準日誌檔案輸出路徑-e 錯誤日誌檔案輸出路徑重啟程式
# 重啟所有程式pm2 restart all# 重啟當前的程式pm2 restart app.js
停止程式
# 通過 pm2 list 檢視appName 或者 appIdpm2 stop appName | appId# 停止所有pm2 stop all
刪除程式
# 刪除所有程式pm2 delete all# 刪除當前的程式pm2 delete appName | appId
檢視日誌
# 檢視所有日誌pm2 logs# 檢視當前程式日誌pm2 logs appName
pm2 配置檔案
上面提到了多種方式來啟動程式,以及 pm2 的各種配置命令,但是 pm2 也支援以配置檔案的方式來啟動程式,這也是我比較推薦的方法。
在專案根目錄新建一個 processes.json 檔案:
{ "apps": [ { "name": "api-fay", // 名稱 "cwd": "./", // 根目錄 "script": "./bin/www", // 啟動檔案\t "log_date_format": "YYYY-MM-DD HH:mm Z", // 日期格式 "error_file": "./logs/node-app.stderr.log", // 錯誤輸出日誌 "out_file": "./logs/node-app.stdout.log", // 日誌 "pid_file": "pids/node-geo-api.pid", // 自定義應用程式的 pid 檔案 "instances": 4, // 程序數量 "min_uptime": "200s", // 最小執行時間,如果程式在200s內退出,則認為程式異常退出,此時觸發重啟max_restarts設定數量 "max_restarts": 10, // 設定應用程式異常退出重啟的次數,預設15次 "max_memory_restart": "10M", // 指定超過使用記憶體上限後自動重啟 "cron_restart": "1 0 * * *", // 定時重啟,僅在 cluster 模式有效, [minute] [hour] [day] [month] [day of week] //"watch": true, // 是否啟用監控模式,預設是 false。如果為 true,當程式變動時,自動過載,也可以設定為要監控的檔案 "watch":[ // 需要監控的目錄\t\t "bin",\t\t "util",\t\t "configs",\t\t "public",\t\t "routes",\t\t "views"\t ], "merge_logs": true, "exec_interpreter": "node", // 應用程式的指令碼型別,預設是 Node "exec_mode": "cluster", // 應用程式啟動模式,這裡設定的是 cluster(叢集),預設是 fork "autorestart": true, // 啟用/禁用應用程式崩潰或退出時自動重啟 "vizion": false // 啟用/禁用 vizion 特性(版本控制) } ]}
然後在 package.json 的 script 中增加一個命令:
"pm2": "pm2 start processes.json"
最後執行以下命令啟動程式即可:
npm run pm2
然後放心大膽的關閉你的終端,pm2 會自動幫你守護 Node 程序,而不用擔心服務掛掉了。
最新評論