如何使用pm2管理node

寶哥哥發表於2018-06-06

安裝pm2過程

  1. 安裝pm2
    npm install -g pm2
    複製程式碼
  2. 驗證一下
    pm2 -v          //2.10.4
    複製程式碼
    安裝完成!

介紹一下pm2

PM2的主要特性:

  1. 內建負載均衡(使用Node cluster 叢集模組)
  2. 後臺執行
  3. 0秒停機過載,我理解大概意思是維護升級的時候不需要停機.
  4. 具有Ubuntu和CentOS 的啟動指令碼
  5. 停止不穩定的程式(避免無限迴圈)
  6. 控制檯檢測
  7. 提供 HTTP API
  8. 遠端控制和實時的介面API ( Nodejs 模組,允許和PM2程式管理器互動 )。

說白了,就是用來管node的

用法

$ pm2 start app.js       # 啟動app專案
$ pm2 list               # 列出由pm2管理的所有程式資訊,還會顯示一個程式會被啟動多少次,因為沒處理的異常。
$ pm2 monit              # 監視每個node程式的CPU和記憶體的使用情況
$ pm2 logs               # 顯示所有程式日誌
$ pm2 stop all           # 停止所有程式
$ pm2 restart all        # 重啟所有程式
$ pm2 reload all         # 0秒停機過載程式 (用於 NETWORKED 程式)
$ pm2 stop 0             # 停止指定的程式
$ pm2 restart 0          # 重啟指定的程式
$ pm2 startup            # 產生 init 指令碼 保持程式活著
$ pm2 web                # 執行健壯的 computer API endpoint (http://localhost:9615)
$ pm2 delete 0           # 殺死指定的程式
$ pm2 delete all         # 殺死全部程式

# 執行程式的不同方式:
$ pm2 start app.js -i max # 根據有效CPU數目啟動最大程式數目
$ pm2 start app.js -i 3   # 啟動3個程式
$ pm2 start app.js -x     # 用fork模式啟動 app.js 而不是使用 cluster
$ pm2 start app.js -x -- -a 23         # 用fork模式啟動 app.js 並且傳遞引數 (-a 23)
$ pm2 start app.js --name serverone    # 啟動一個程式並把它命名為 serverone
$ pm2 stop serverone                   # 停止 serverone 程式
$ pm2 start app.json                   # 啟動程式, 在 app.json裡設定選項
$ pm2 start app.js -i max -- -a 23     # 在--之後給 app.js 傳遞引數
$ pm2 start app.js -i max -e err.log -o out.log    # 啟動 並 生成一個配置檔案
複製程式碼

linux伺服器環境下設定為開機啟動

pm2 startup
pm2 save  
複製程式碼

就會把你啟動的網站資訊存在 ~/.pm2/dump.pm2,例如 /root/.pm2/dump.pm2,下次開機啟動就會自動執行,免去你手動啟動

配置pm2啟動檔案

在專案根目錄新增一個processes.json: 內容如下:

{
  "apps": [
    {
      "name": "mywork",
      "cwd": "/srv/node-app/current",
      "script": "bin/www",
      "log_date_format": "YYYY-MM-DD HH:mm Z",
      "error_file": "/var/log/node-app/node-app.stderr.log",
      "out_file": "log/node-app.stdout.log",
      "pid_file": "pids/node-geo-api.pid",
      "instances": 6,
      "min_uptime": "200s",
      "max_restarts": 10,
      "max_memory_restart": "1M",
      "cron_restart": "1 0 * * *",
      "watch": false,
      "merge_logs": true,
      "exec_interpreter": "node",
      "exec_mode": "fork",
      "autorestart": false,
      "vizion": false
    }
  ]
}
複製程式碼

說明:

apps:json結構,apps是一個陣列,每一個陣列成員就是對應一個pm2中執行的應用
name:應用程式名稱
cwd:應用程式所在的目錄
script:應用程式的指令碼路徑
log_date_format:
error_file:自定義應用程式的錯誤日誌檔案
out_file:自定義應用程式日誌檔案
pid_file:自定義應用程式的pid檔案
instances:
min_uptime:最小執行時間,這裡設定的是60s即如果應用程式在60s內退出,pm2會認為程式異常退出,此時觸發重啟max_restarts設定數量
max_restarts:設定應用程式異常退出重啟的次數,預設15次(從0開始計數)
cron_restart:定時啟動,解決重啟能解決的問題
watch:是否啟用監控模式,預設是false。如果設定成true,當應用程式變動時,pm2會自動過載。這裡也可以設定你要監控的檔案。
merge_logs:
exec_interpreter:應用程式的指令碼型別,這裡使用的shell,預設是nodejs
exec_mode:應用程式啟動模式,這裡設定的是cluster_mode(叢集),預設是fork
autorestart:啟用/禁用應用程式崩潰或退出時自動重啟
vizion:啟用/禁用vizion特性(版本控制)
複製程式碼

可以通過 pm2 start processes.json來啟動。

參考資料

pm2中文手冊

相關文章