PM2 API

PM2 API

PM2 可用於程式設計,讓您能直接從程式碼管理處理程序。

快速入門

注意:若要釋放與 PM2 的連線並讓您的應用程式自動結束,請務必使用 pm2.disconnect() 斷開與 pm2 的連線。

首先,將 PM2 加入為相依性

npm install pm2 --save

然後建立一個名為 app.js 和 pm2-control.js 的指令碼,其中包含以下內容

const pm2 = require('pm2')

pm2.connect(function(err) {
  if (err) {
    console.error(err)
    process.exit(2)
  }

  pm2.start({
    script    : 'api.js',
    name      : 'api'
  }, function(err, apps) {
    if (err) {
      console.error(err)
      return pm2.disconnect()
    }

    pm2.list((err, list) => {
      console.log(err, list)

      pm2.restart('api', (err, proc) => {
        // Disconnects from PM2
        pm2.disconnect()
      })
    })
  })
})
  • 這將會產生或連線到本機 PM2
  • 接著,以名稱 api 啟動 app.js
  • 顯示由 PM2 管理的所有應用程式
  • 接著,重新啟動名稱為 api 的應用程式
  • 然後斷開與 PM2 的連線

API 方法

pm2.connect([no_daemon_mode], fn)

連線到本機 PM2 或產生新的 PM2 執行個體。

參數 類型 預設值 說明
[no_daemon_mode] 布林值 false 如果為 true,它將執行一個獨立的 PM2,該 PM2 將在結束時自動結束
fn 函數   回呼
  • noDaemonMode:如果為第一個參數傳遞 true,pm2 將不會作為守護程式執行,並且會在相關指令碼結束時結束。預設情況下,pm2 會在您的指令碼結束後保持執行。如果 pm2 已經在執行,您的指令碼將連結到現有的守護程式,但會在您的處理程序結束後結束。

  • script - 要執行的指令碼路徑。
  • jsonConfigFile - JSON 檔案路徑,其中可以包含與 options 參數相同的選項。
  • errback(err,proc) - 在啟動 script 時呼叫的 errback。proc 參數將會是 pm2 處理程序物件
  • options - 包含以下選項的物件(這些選項的額外說明 在此
    • 名稱 - 可用於與 (例如在其他指令中重新啟動) 程序互動的任意名稱。預設為腳本名稱,不含副檔名 (例如 "testScript" 對應 "testScript.js")。
    • script - 要執行的指令碼路徑。
    • 參數 - 傳遞給腳本的參數,為字串或字串陣列。
    • 解釋器參數 - 用於呼叫解釋器程序的參數,為字串或字串陣列。例如 “–harmony” 或 [”–harmony”,”–debug”]。僅適用於 解釋器 不是 “none” 的情況 (預設為 “node”)。
    • 工作目錄 - 程序啟動時的工作目錄。
    • 輸出 - (預設: "~/.pm2/logs/app_name-out.log") 附加 stdout 輸出的檔案路徑。可以與 錯誤 相同的檔案。
    • 錯誤 - (預設: "~/.pm2/logs/app_name-error.err") 附加 stderr 輸出的檔案路徑。可以與 輸出 相同的檔案。
    • 日誌日期格式 - 日誌時間戳記的顯示格式 (例如 “YYYY-MM-DD HH:mm Z”)。格式為 moment 顯示格式
    • PID - (預設: "~/.pm2/pids/app_name-id.pid") 寫入已啟動程序 PID 的檔案路徑。檔案將被覆寫。請注意,pm2 沒有使用此檔案,因此使用者可以隨時操作或移除該檔案。當程序停止或守護程序終止時,檔案將被刪除。
    • 最小上線時間 - 腳本被視為成功啟動前的最小上線時間。
    • 最大重新啟動次數 - 如果腳本在上線時間小於 最小上線時間 的情況下退出,腳本將被重新啟動的最大連續次數。
    • 最大記憶體重新啟動 - 如果設定且 腳本 的記憶體使用量超過設定的數字,pm2 將重新啟動 腳本。使用人體工學後綴:'K' 表示千位元組,'M' 表示百萬位元組,'G' 表示十億位元組,依此類推。例如 “150M”。
    • 終止逾時 - (預設: 1600) 在 停止重新啟動 指令發出 SIGINT 訊號後,等待的毫秒數,以 SIGKILL 訊號強制終止腳本。
    • 重新啟動延遲 - (預設: 0) 已退出的腳本重新啟動前的等待毫秒數。
    • 解譯器 -(預設:「node」)用於腳本的解譯器(例如「python」、「ruby」、「bash」等)。「none」值會將「腳本」當作二進位執行檔執行。
    • 執行模式 -(預設:「fork」)如果設定為「叢集」,會啟用叢集(執行多個腳本實例)。按此查看更多詳細資料
    • 實例 -(預設:1)要建立的腳本實例數。僅在執行_模式「叢集」中相關。
    • 合併記錄 -(預設:false)如果為 true,會將所有腳本實例的記錄檔合併成一個 stderr 記錄檔和一個 stdout 記錄檔。僅適用於「叢集」模式。例如,如果您透過 pm2 啟動 4 個「test.js」實例,通常會有 4 個 stdout 記錄檔和 4 個 stderr 記錄檔,但如果將此選項設定為 true,您只會有一個 stdout 檔案和一個 stderr 檔案。
    • 監控 - 如果設定為true,應用程式會在腳本檔案變更時重新啟動。
    • 強制(預設:false)預設情況下,pm2 僅會在該腳本尚未執行時啟動腳本(腳本是應用程式的路徑,而不是已執行的應用程式的名稱)。如果強制設定為 true,pm2 會啟動該腳本的新實例。
    • 自動重新啟動(預設true)。如果false,pm2 不會嘗試在成功完成或處理失敗後重新啟動它。
    • cron
    • executeCommand
    • write
    • sourceMapSupport
    • disableSourceMapSupport

與本機 PM2 斷開連線

pm2.start(process, fn)

啟動程序

參數 類型 說明
process 字串/物件 指令碼路徑 (相對) 或透過 選項 的物件
fn 函數 回呼

pm2.stop(process, fn)

停止程序

參數 類型 說明
process 字串/數字 目標程序 ID 或名稱
fn 函數 回呼

pm2.restart(process, [options], fn)

重新啟動程序

參數 類型 說明
process 字串/數字 目標程序 ID 或名稱
[options] 物件 選項 (也加入 updateEnv: true 以強制更新)
fn 函數 回呼

pm2.reload(process, fn)

重新載入程序

參數 類型 說明
process 字串/數字 目標程序 ID 或名稱
fn 函數 回呼

pm2.delete(process, fn)

刪除程序

參數 類型 說明
process 字串/數字 目標程序 ID 或名稱
fn 函數 回呼

pm2.killDaemon(fn)

終止 pm2 惡魔程式 (與 pm2 kill 相同)。請注意,當惡魔程式終止時,其所有程序也會終止。另請注意,即使在終止惡魔程式後,您仍必須明確與惡魔程式斷開連線。

pm2.describe(process, fn)

取得目標程序的所有元資料

參數 類型 說明
process 字串/數字 目標程序 ID 或名稱
fn 函數 回呼

pm2.list(fn)

擷取由 PM2 管理的所有程序

進階方法

pm2.sendDataToProcessId(packet)

將資料傳送至目標程序。

參數 類型 說明
packet.id 數字 目標程序 ID
packet.type 字串 必須是 process:msg
packet.topic 布林值 必須是 true
packet.data 物件 將傳送至目標程序的物件資料

資料將透過以下方式由目標程序接收

process.on('message', function(packet) {})

pm2.launchBus(fn)

這允許接收由 PM2 管理的程序訊息。

const pm2 = require('pm2')

pm2.launchBus(function(err, pm2_bus) {
  pm2_bus.on('process:msg', function(packet) {
    console.log(packet)
  })
})

然後從由 PM2 管理的程序

process.send({
  type : 'process:msg',
  data : {
    success : true
  }
})

pm2.sendSignalToProcessName(signal, process, fn)

將自訂系統訊號傳送至目標程序名稱

參數 類型 說明
signal 字串 系統訊號名稱
process 字串 目標程序名稱
fn 函數 Callback(err, process)

pm2.sendSignalToProcessId(signal, process, fn)

將自訂系統訊號傳送至目標程序 ID

參數 類型 說明
signal 字串 系統訊號名稱
process 數字 目標程序 ID
fn 函數 Callback(err, process)

程序結構

呼叫上述任何方法時,會傳回已變異的程序陣列。此物件包含

  • processDescription - 包含程序資訊的物件陣列。每個物件包含下列屬性
    • name - 在原始 start 指令中指定的程式名稱。
    • pid - 程序的 PID。
    • pm_id - pm2 God 惡魔程序的 pid。
    • monit - 包含下列內容的物件
      • memory - 程序使用的位元組數。
      • cpu - 程序目前使用的 CPU 百分比。
    • pm2_env - 程序環境中的路徑變數清單。這些變數包括
      • pm_cwd - 程序的工作目錄。
      • pm_out_log_path - stdout 日誌檔案路徑。
      • pm_err_log_path - stderr 日誌檔案路徑。
      • exec_interpreter - 使用的直譯器。
      • pm_uptime - 程序的正常執行時間。
      • unstable_restarts - 程序經歷的不穩定重新啟動次數。
      • restart_time
      • status - 「線上」、「停止中」、「已停止」、「啟動中」、「錯誤」或「一次性啟動狀態」
      • instances - 正在執行的執行個體數。
      • pm_exec_path - 此程序中執行的指令碼路徑。

範例

傳送訊息至程序

pm2-call.js

const pm2 = require('pm2')

pm2.connect(function() {
  pm2.sendDataToProcessId({
    // id of process from "pm2 list" command or from pm2.list(errback) method
    id   : 1,

    // process:msg will be send as 'message' on target process
    type : 'process:msg',

    // Data to be sent
    data : {
      some : 'data'
    },
    id   : 0, // id of process from "pm2 list" command or from pm2.list(errback) method
    topic: 'some topic'
  }, function(err, res) {
  })
})

// Listen to messages from application
pm2.launchBus(function(err, pm2_bus) {
  pm2_bus.on('process:msg', function(packet) {
    console.log(packet)
  })
})

pm2-app.js

process.on('message', function(packet) {
  process.send({
    type : 'process:msg',
    data : {
     success : true
    }
 });
});
為此頁面做出貢獻