1. 程式人生 > >Ubuntu16.0.4 PM2 學習筆記(待補充)

Ubuntu16.0.4 PM2 學習筆記(待補充)

概述

簡介

PM2(Process Manager 2 )是具有內建負載均衡器的Node.js應用程式的生產執行時和程序管理器。 它允許您永久保持應用程式活躍,無需停機即可重新載入它們,並促進常見的Devops任務。


主要特性:

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

官方描述主要特性:

  • 持久化:一旦開始使用,您的應用將達到持久化,在崩潰和機器重啟時自啟動。
  • 流程管理:您所有的應用都被守護程序,例如,在後臺持續執行。
  • 日誌管理:應用程式日誌儲存在伺服器的硬碟中~/.pm2/logs/
  • 負載均衡:PM2可以通過建立共享同一伺服器埠的多個子程序來擴充套件您的應用程式。這樣做還允許您以零秒停機時間重新啟動應用程式。
  • 終端監控:可以在終端中監控您的應用程式並檢查應用程式執行狀況(CPU使用率,使用的記憶體,請求/分鐘等)。
  • SSH部署:自動部署,避免逐個在所有伺服器中進行ssh。
  • 靜態服務:支援靜態伺服器功能

多平臺支援:適用於Linux(穩定)和macOS(穩定)和Windows(穩定)

作者:cs380637384
來源:CSDN
原文:https://blog.csdn.net/cs380637384/article/details/82682799
版權宣告:本文為博主原創文章,轉載請附上博文連結!

指南

安裝

使用Root賬戶全域性安裝pm2

npm install pm2 -g

目錄介紹

pm2安裝好後,會自動建立下面目錄。看檔名基本就知道幹嘛的了,就不翻譯了。

  • $HOME/.pm2 will contain all PM2 related files
  • $HOME/.pm2/logs
    will contain all applications logs
  • $HOME/.pm2/pids will contain all applications pids
  • $HOME/.pm2/pm2.log PM2 logs-
  • $HOME/.pm2/pm2.pid PM2 pid
  • $HOME/.pm2/rpc.sock Socket file for remote commands
  • $HOME/.pm2/pub.sock Socket file for publishable events
  • $HOME/.pm2/conf.js PM2 Configuration

入門教程

快速開始

參考中文文件:傳送門
參考官方文件:傳送門(建議看這個)
在這裡插入圖片描述

常用指令

啟動

引數說明:

  • --watch:監聽應用目錄的變化,一旦發生變化,自動重啟。如果要精確監聽、不見聽的目錄,最好通過配置檔案。
  • -i --instances:啟用多少個例項,可用於負載均衡。如果-i 0或者-i max,則根據當前機器核數確定例項數目。-
    --ignore-watch:排除監聽的目錄/檔案,可以是特定的檔名,也可以是正則。比如–ignore-watch=“test node_modules “some scripts””
  • -n --name:應用的名稱。檢視應用資訊的時候可以用到。
  • -o --output <path>:標準輸出日誌檔案的路徑。
  • -e --error <path>:錯誤輸出日誌檔案的路徑。
  • --interpreter <interpreter>:the interpreter pm2 should use for executing app (bash, python…)。比如你用的coffee script來編寫應用。

示例:

pm2 start app.js --watch -i 2

完整引數列表:

   -h, --help                           output usage information
   -V, --version                        output the version number
   -v --version                         get version
   -s --silent                          hide all messages
   -m --mini-list                       display a compacted list without formatting
   -f --force                           force actions
   -n --name &lt;name&gt;                     set a &lt;name&gt; for script
   -i --instances &lt;number&gt;              launch [number] instances (for networked app)(load balanced)
   -l --log [path]                      specify entire log file (error and out are both included)
   -o --output &lt;path&gt;                   specify out log file
   -e --error &lt;path&gt;                    specify error log file
   -p --pid &lt;pid&gt;                       specify pid file
   --max-memory-restart &lt;memory&gt;        specify max memory amount used to autorestart (in megaoctets)
   --env &lt;environment_name&gt;             specify environment to get specific env variables (for JSON declaration)
   -x --execute-command                 execute a program using fork system
   -u --user &lt;username&gt;                 define user when generating startup script
   -c --cron &lt;cron_pattern&gt;             restart a running process based on a cron pattern
   -w --write                           write configuration in local folder
   --interpreter &lt;interpreter&gt;          the interpreter pm2 should use for executing app (bash, python...)
   --log-date-format &lt;momentjs format&gt;  add custom prefix timestamp to logs
   --no-daemon                          run pm2 daemon in the foreground if it doesn't exist already
   --merge-logs                         merge logs from different instances but keep error and out separated
   --watch                              watch application folder for changes
   --ignore-watch &lt;folders|files&gt;       folder/files to be ignored watching, chould be a specific name or regex - e.g. --ignore-watch="test node_modules "some scripts""
   --node-args &lt;node_args&gt;              space delimited arguments to pass to node in cluster mode - e.g. --node-args="--debug=7001 --trace-deprecation"
   --no-color                           skip colors
   --no-vizion                          skip vizion features (versioning control)
   --no-autorestart                     do not automatically restart apps

重啟、過載

重啟

pm2 restart app.js

0秒停機重新載入

pm2 reload app.js        //重新啟動所有程序,始終保持至少一個程序在執行
pm2 gracefulReload all   //優雅地以群集模式重新載入所有應用程式

停止

停止特定的應用。可以先通過pm2 list獲取應用的名字(–name指定的)或者程序id。

pm2 stop all               //停止所有應用
pm2 stop [AppName]        //根據應用名停止指定應用
pm2 stop [ID]             //根據應用id停止指定應用

刪除

pm2 delete all               //關閉並刪除應用
pm2 delete [AppName]        //根據應用名關閉並刪除應用
pm2 delete [ID]            //根據應用ID關閉並刪除應用

檢視程序狀態

pm2 list

檢視某個程序的資訊

 pm2 describe 0

顯示應用程式資訊

pm2 show [Name]      //根據name檢視
pm2 show [ID]        //根據id檢視

日誌檢視

預設情況下,所有日誌都被儲存到 $HOME/.pm2/logs

pm2 logs            //檢視所有應用日誌
pm2 logs [Name]    //根據指定應用名檢視應用日誌
pm2 logs [ID]      //根據指定應用ID檢視應用日誌
pm2 flush	//清空所有應用日誌

output 只是標準輸出 (console.log)
error 只是錯誤輸出 (console.error)
log 結合了 output 和 error, 預設是禁用的

配置檔案

生成配置檔案

cd到你的工程目錄,輸入如下指令,生成例項的Javascript格式的配置檔案。(.config.js檔案)

pm2 ecosystem        //生成一個示例JSON配置檔案
pm2 init

在這裡插入圖片描述


配置檔案這塊支援JavaScript格式、Json格式、Json5格式、Yaml格式,這裡我只列Json格式。具體參考幫助文件:傳送門

JSON格式

具體引數配置參考地址:傳送門

{
  "apps" : [{
    "name"        : "worker",
    "script"      : "./worker.js",
    "watch"       : true,
    "env": {
      "NODE_ENV": "development"
    },
    "env_production" : {
       "NODE_ENV": "production"
    }
  },{
    "name"       : "api-app",
    "script"     : "./api.js",
    "instances"  : 4,
    "exec_mode"  : "cluster"
  }]
}

自動重啟(監聽模式)

這裡是監控整個專案的檔案,如果只想監聽指定檔案和目錄,建議通過配置檔案的watchignore_watch欄位來設定。詳細的配置請檢視官方文件:傳送門

pm2 start app.js --watch  //當檔案發生變化,自動重啟

開機啟動

pm2 startup

學習資源

PM2 官方文件:傳送門
PM2中文文件資源:傳送門