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
}
});
});