生態系統檔案

設定檔

在使用 PM2 管理多個應用程式時,請使用 JS 設定檔來組織它們。

產生設定檔

若要產生範例設定檔,您可以輸入此指令

$ pm2 init simple

這將產生範例 ecosystem.config.js

module.exports = {
  apps : [{
    name   : "app1",
    script : "./app.js"
  }]
}

如果您要建立自己的設定檔,請確定它以 .config.js 結尾,這樣 PM2 才能將它辨識為設定檔。

對設定檔進行操作

與對應用程式進行操作一樣,您可以啟動/停止/重新啟動/刪除設定檔中包含的所有應用程式

# Start all applications
pm2 start ecosystem.config.js

# Stop all
pm2 stop ecosystem.config.js

# Restart all
pm2 restart ecosystem.config.js

# Reload all
pm2 reload ecosystem.config.js

# Delete all
pm2 delete ecosystem.config.js

對特定程序進行操作

您也可以使用其名稱和選項 --only <app_name> 對特定應用程式進行操作

pm2 start   ecosystem.config.js --only api-app

注意--only 選項也適用於啟動/重新啟動/停止/刪除

您甚至可以指定多個要進行操作的應用程式,方法是指定每個應用程式名稱,並以逗號分隔

pm2 start ecosystem.config.js --only "api-app,worker-app"

切換環境

您可以透過 env_* 選項指定不同的環境變數組。

範例

module.exports = {
  apps : [{
    name   : "app1",
    script : "./app.js",
    env_production: {
       NODE_ENV: "production"
    },
    env_development: {
       NODE_ENV: "development"
    }
  }]
}

現在,若要在不同環境中的變數之間切換,請指定 --env [env name] 選項

pm2 start process.json --env production
pm2 restart process.json --env development

可用的屬性

應用程式行為和設定檔可以使用下列屬性進行微調

一般

欄位 類型 範例 說明
名稱 (字串) “my-api” 應用程式名稱(預設為不含副檔名的腳本檔檔名)
腳本 (字串) ”./api/app.js” 相對於 pm2 啟動的腳本路徑
cwd (字串) “/var/www/” 啟動應用程式的目錄
引數 (字串) “-a 13 -b 12” 包含透過 CLI 傳遞給腳本的所有引數的字串
直譯器 (字串) “/usr/bin/python” 直譯器絕對路徑(預設為 node)
interpreter_args (字串) ”–harmony” 傳遞給直譯器的選項
node_args (字串)   interpreter_args 的別名

進階功能

欄位 類型 範例 說明
instances 數字 -1 要啟動的應用程式執行個體數目
exec_mode 字串 “cluster” 啟動應用程式的模式,可以是 “cluster” 或 “fork”,預設為 fork
watch 布林值或 [] true 啟用監控和重新啟動功能,如果資料夾或子資料夾中的檔案有變更,應用程式將會重新載入
ignore_watch 清單 [”[\/\\]\./”, “node_modules”] 由監控功能忽略某些檔案或資料夾名稱的正則表示式清單
max_memory_restart 字串 “150M” 如果應用程式超過指定的記憶體量,它將會重新啟動。人機友善的格式:可以是 “10M”、“100K”、“2G” 等…
env 物件 {“NODE_ENV”: “development”, “ID”: “42”} 將會出現在應用程式中的環境變數
env_ 物件 {“NODE_ENV”: “production”, “ID”: “89”} 執行 pm2 restart app.yml --env

時注入
appendEnvToName 布林值 true 預設為 false。用於在單一伺服器上部署多個環境。它會將每個環境附加到名稱。例如:my-api-production
source_map_support 布林值 true 預設為 true,[啟用/停用原始碼對應檔]
instance_var 字串 “NODE_APP_INSTANCE” 請參閱文件
filter_env 字串陣列 [ “REACT_” ] 排除以 “REACT_” 開頭的全球變數,並禁止它們滲透到叢集中。

日誌檔

欄位 類型 範例 說明
log_date_format (字串) “YYYY-MM-DD HH:mm Z” 日誌日期格式(請參閱日誌區段)
error_file (字串)   錯誤檔案路徑(預設為 $HOME/.pm2/logs/<app name>-error-<pid>.log)
out_file (字串)   輸出檔案路徑(預設為 $HOME/.pm2/logs/<app name>-out-<pid>.log)
log_file (字串)   輸出和錯誤日誌的檔案路徑(預設為停用)
combine_logs 布林值 true 如果設為 true,避免使用程序 ID 為日誌檔案加上字尾
merge_logs 布林值 true combine_logs 的別名
time 布林值 false 預設為 false。如果為 true,會自動在日誌前面加上日期
pid_file (字串)   pid 檔案路徑(預設為 $HOME/.pm2/pids/<app name>-<pid>.pid)

控制流程

欄位 類型 範例 說明
min_uptime (數字)   應用程式開始運作的最小正常運行時間
listen_timeout 數字 8000 應用程式未偵聽時,強制重新載入前經過的毫秒數
kill_timeout 數字 1600 在傳送 最後一個 SIGKILL 之前經過的毫秒數
shutdown_with_message 布林值 false 使用 process.send(‘shutdown’) 關閉應用程式,而非 process.kill(pid, SIGINT)
wait_ready 布林值 false 不要等待偵聽事件重新載入,而是等待 process.send(‘ready’)
max_restarts 數字 10 在應用程式被視為有錯誤並停止重新啟動之前,連續不穩定的重新啟動次數(小於 1 秒間隔或透過 min_uptime 設定自訂時間)
restart_delay 數字 4000 在重新啟動已當掉的應用程式之前等待的時間(以毫秒為單位)。預設為 0。
autorestart 布林值 false 預設為 true。如果為 false,PM2 將不會在應用程式當掉或正常結束時重新啟動應用程式
cron_restart 字串 “1 0 * * *” 重新啟動應用程式的 cron 模式。應用程式必須正在執行,cron 功能才能運作
vizion 布林值 false 預設為 true。如果為 false,PM2 將在沒有 vizion 功能(版本控制元資料)的情況下啟動
post_update 清單 [“npm install”, “echo launching the app”] 在您從 Keymetrics 儀表板執行拉取/升級操作後將執行的命令清單
force 布林值 true 預設為 false。如果為 true,您可以多次啟動同一個腳本,而這通常是不被 PM2 允許的

部署

項目名稱 說明 類型 預設值
key SSH 金鑰路徑 字串 $HOME/.ssh
user SSH 使用者 字串  
host SSH 主機 [字串]  
ssh_options 沒有命令列旗標的 SSH 選項,請參閱「man ssh」 字串或 [字串]  
ref GIT 遠端/分支 字串  
repo GIT 遠端 字串  
path 伺服器中的路徑 字串  
pre-setup 預設指令或您本機電腦上腳本的路徑 字串  
post-setup 主機電腦上的後設指令或腳本路徑 字串  
pre-deploy-local 預部署動作 字串  
post-deploy 後部署動作 字串  

注意事項

使用 JSON 應用程式宣告時傳遞的所有命令列選項都將被捨棄,例如

CWD

cwd:您的 JSON 宣告不需要與您的腳本放在一起。如果您希望將 JSON 保存在腳本以外的位置(例如,/etc/pm2/conf.d/node-app.json),您需要使用 cwd 功能(請注意,這對於使用符號連結的 Capistrano 風格目錄結構非常有幫助)。檔案可以相對於 cwd 目錄,或絕對路徑(請參閱以下範例)。

CLI/JSON 選項

所有鍵值都能在 JSON 設定檔中使用,但命令列上幾乎保持相同,例如

exec_mode         -> --execute-command
max_restarts      -> --max-restarts
force             -> --force

使用引號來建立 ESC,例如

$pm2 start test.js --node-args "port=3001 sitename='first pm2 app'"

nodeArgs 參數將會解析為

[
  "port=3001",
  "sitename=first pm2 app"
]

但不是

[
  "port=3001",
  "sitename='first",
  "pm2",
  "app'"
]

停用記錄

你可以傳遞 /dev/null 至 error_file 或 out_file 來停用記錄儲存。注意:從 PM2 2.4.0 開始,/dev/nullNULL 會獨立於平台停用記錄。

記錄後綴

你可以透過啟用選項 merge_logs: true 來停用記錄上的自動 ID 後綴(例如 app-name-ID.log

環境定義

你需要使用 --env <envname> 告訴 pm2 使用在程序檔案中定義的特定環境

{
  "apps" : [{
    "name"        : "worker-app",
    "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"
  }]
}

在此範例中,你將執行 pm2 start ecosystem.json,它將使用預設環境(在開發中)啟動你的應用程式。然後你使用 pm2 start ecosystem.json --env production,它將使用屬性 env_<name>,其中 name 在這裡是 production,因此它將使用 NODE_ENV=production 啟動你的應用程式。

特殊 ext_type

  • min_uptime min_uptime 的值可以是
    • 數字 例如 "min_uptime": 3000 表示 3000 毫秒。
    • 字串 因此,我們讓它簡短且易於設定:hms,例如:"min_uptime": "1h" 表示一小時,"min_uptime": "5m" 表示五分鐘,"min_uptime": "10s" 表示十秒(這些將轉換為毫秒)。
  • max_memory_restart max_memory_restart 的值可以是
    • 數字 例如 "max_memory_restart": 1024 表示 1024 位元組(不是位元)。
    • 字串因此,我們讓它簡短且容易設定:GMK,例如:"max_memory_restart": "1G" 表示 1 GB、"max_memory_restart": "5M" 表示 5 MB,而 "max_memory_restart": "10K" 表示 10 KB(這些值會轉換成位元組)。
  • 選用值例如 exec_mode 可以採用 cluster (cluster_mode) 或 fork (fork_mode) 作為可能的值。

  • 須知事項
    • "instances": 0 表示 PM2 會根據 CPU 數量啟動最多可能的處理程序(叢集模式)
    • 陣列 argsnode_argsignore_watch 可以是 Array 類型(例如:"args": ["--toto=heya coco", "-d", "1"])或 string 類型(例如:"args": "--to='heya coco' -d 1"
為此頁面提供意見回饋