エコシステムファイル

設定ファイル

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オプションは、start/restart/stop/deleteでも動作します。

各アプリ名をカンマで区切って指定することで、複数のアプリを操作対象に指定することもできます。

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 [環境名]オプションを指定します。

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

使用可能な属性

アプリケーションの動作と設定は、次の属性を使用して微調整できます。

一般

フィールド タイプ 説明
name (文字列) “my-api” アプリケーション名(デフォルトは拡張子なしのスクリプトファイル名)
script (文字列) ”./api/app.js” pm2 startからの相対スクリプトパス
cwd (文字列) “/var/www/” アプリが起動されるディレクトリ
args (文字列) “-a 13 -b 12” CLI経由でスクリプトに渡されるすべての引数をを含む文字列
interpreter (文字列) “/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”} injectpm2 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/<アプリ名>-error-<pid>.log)
out_file (文字列)   出力ファイルパス(デフォルトは$HOME/.pm2/logs/<アプリ名>-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/<アプリ名>-<pid>.pid)

制御フロー

フィールド タイプ 説明
min_uptime (数値)   起動されたとみなされるアプリの最小稼働時間
listen_timeout 数値 8000 アプリがリッスンしていない場合にリロードを強制するまでの時間(ミリ秒単位)
kill_timeout 数値 1600 最後のSIGKILLを送信するまでの時間(ミリ秒単位)
shutdown_with_message ブール値 false process.kill(pid, SIGINT)の代わりにprocess.send('shutdown')でアプリケーションをシャットダウンします。
wait_ready ブール値 false リロードがlistenイベントを待機する代わりに、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はビジョン機能(バージョン管理メタデータ)なしで起動します。
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/nullまたはNULLはプラットフォームに関係なくログを無効にします。

ログのサフィックス

オプションmerge_logs: trueを有効にすることで、ログの自動IDサフィックス(例:app-name-ID.log)を無効にすることができます。

環境定義

プロセスファイル内で定義された特定の環境を使用するようにpm2に指示するには、--env <環境名>を使用する必要があります。

{
  "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_<名前>が使用されます。ここで、名前はproductionなので、アプリはNODE_ENV=productionで起動します。

特別なext_type

  • min_uptime min_uptimeの値は次のとおりです。
    • 数値 例:"min_uptime": 3000は3000ミリ秒を意味します。
    • 文字列 設定を簡潔にするために、hmsを使用できます。例:"min_uptime": "1h"は1時間、"min_uptime": "5m"は5分、"min_uptime": "10s"は10秒を意味します(これらはミリ秒に変換されます)。
  • max_memory_restart max_memory_restartの値は次のとおりです。
    • 数値 例:"max_memory_restart": 1024は1024バイトを意味します(**ビットではありません**)。
    • 文字列 設定を簡潔にするために、GMKを使用できます。例:"max_memory_restart": "1G"は1ギガバイト、"max_memory_restart": "5M"は5メガバイト、"max_memory_restart": "10K"は10キロバイトを意味します(これらはバイトに変換されます)。
  • オプション値 たとえば、exec_modeは、可能な値としてclustercluster_mode)またはforkfork_mode)を取ることができます。

  • 知っておくべきこと
    • "instances": 0 は、PM2 が CPU の数に応じて可能な限り最大のプロセスを起動することを意味します(クラスターモード)。
    • 配列 argsnode_args、および ignore_watch は、Array 型(例:"args": ["--toto=heya coco", "-d", "1"])または string 型(例:"args": "--to='heya coco' -d 1")です。
このページに貢献する