pm2 - node.js プロセス管理パッケージ

pm2はnode.jsアプリプロセスの管理パッケージです、ロードバランサー機能もビルドインされています。

pm2

pm2とは

pm2はサーバーの全てのCPUを使って、ステータレッスnode.jsアプリを負荷分散管理するパッケージです、アプリケーションのダウンタイムは0sを保証できます。

主な特徴

  • ロードバランサー機能をビルドイン(native clusterモジュール利用)
  • デーモンスクリプト
  • node.jsアプリを0sリロード
  • Ubuntu/CentOS起動スクリプトも提供(Ubuntuはupdaterc.d、ほかのLinuxはchkconfig)
  • 不安定プロセスを停止させる(無限ループ回避)
  • コンソール監視
  • HTTP API
  • リモートコントロールとリアルタイムAPIインターフェース

pm2はnode.js v0.11,v0.10,v0.8でテスト通りました、CoffeeScriptとの互換性も確保する。LinuxとMacOSで動きます。

インストール

1
npm install pm2@latest -g

文法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
$ npm install pm2@latest -g # グローバルでpm2モジュールをインストール
$ pm2 start app.js -i 4 # app.jsの4つのインスタンスを起動
# `'max'`を渡せば、サーバーのCPU数に応じてプロセスを起動させる
$ pm2 start app.js --name my-api # プロセス名称指定
$ pm2 start app.js --no-daemon # 実行だけで、メモリにデーモンさせない
$ pm2 list # 全ての起動中のプロセス状態を確認
$ pm2 monit # 全ての起動中のプロセスを監視
$ pm2 logs # 全ての起動中のプロセスログを表示
$ pm2 flush # ログファイルをクリア
$ pm2 stop all # 全てのプロセスを停止
$ pm2 restart all # 全てのプロセスを再起動
$ pm2 reload all # 全てのプロセスを0sリロード
$ pm2 stop 0 # 指定したプロセスを停止
$ pm2 restart 0 # 指定したプロセスを再起動
$ pm2 delete 0 # 指定したプロセスを削除
$ pm2 delete all # 全プロセスを削除
$ pm2 ping # pm2デーモン実行確認
$ pm2 startup ubuntu # OS起動スクリプトを作成
# ubuntu/centos
$ pm2 web # Web監視サービス起動 (http://localhost:9615)
$ pm2 dump # 全プロセスをバックアップ
$ pm2 resurrect # バックアップしたプロセスを復活
$ pm2 sendSignal SIGUSR2 signal.js # システムシングルを送信

node.js以外はpm2は他のスクリプトも管理できます。

1
2
3
4
5
$ pm2 start echo.php
$ pm2 start echo.py
$ pm2 start echo.sh
$ pm2 start echo.rb
$ pm2 start echo.pl

他のプロセス実行方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ pm2 start app.js -i max # CPU数に応じてプロセスを起動する
$ pm2 start app.js -i 3 # 三つのプロセスを起動する
$ pm2 start app.js --node-args="--debug=7001 --trace-deprecation" # --node-args でnodeに引数を渡す
$ pm2 start app.js -x # forkモードで起動
$ pm2 start app.js -x -- -a 23 # forkモードで起動、且つ引数(-a 23)を渡す
$ pm2 start app.js --name serverone # プロセス名称(serverone)を指定して起動
# プロセス停止時にプロセス名称も指定できる
# pm2 stop serverone
$ pm2 start app.json # 設定ファイル(app.json)でプロセス起動
$ pm2 start app.js -i max -- -a 23 # 引数を渡す
$ pm2 start app.js -i max -e err.log -o out.log # 出力ファイルパスを指定してプロセス起動

他の言語もforkモードで実行できます。

1
2
3
$ pm2 start my-bash-script.sh -x --interpreter bash
$ pm2 start my-python-script.py -x --interpreter python

Pid file, error and out Log files

デフォルトは~/.pm2/の下にプロセスファイルを出力する

1
2
3
4
5
6
7
.pm2/
├── dump.pm2
├── custom_options.sh
├── pm2.log
├── pm2.pid
├── logs
└── pids

0s downtime reload

プロセスコネクションを切断せずにコードをリロードする

1
2
$ pm2 reload all
$ pm2 reload my-api

CoffeeScriptもサポート

1
$ pm2 start my_app.coffee

マルチプロセスJSON設定

processes.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[{
"name" : "echo",
"script" : "./examples/args.js",
"args" : "['--toto=heya coco', '-d', '1']",
"env": {
"NODE_ENV": "production",
"AWESOME_SERVICE_API_TOKEN": "xxx"
}
}
,{
"name" : "api",
"script" : "./examples/child.js",
"instances" : "4",
"error_file" : "./examples/child-err.log",
"out_file" : "./examples/child-out.log",
"pid_file" : "./examples/child.pid",
"exec_mode" : "cluster_mode",
"port" : 9005
},{
"min_uptime" : "100",
"name" : "auto-kill",
"exec_mode" : "fork_mode",
"script" : "./examples/killfast.js"
}]

jsonファイル利用

1
2
3
4
$ pm2 start processes.json
$ pm2 stop processes.json
$ pm2 delete processes.json
$ pm2 restart processes.json

コード構成

pm2 code-structure

オフィシャルサイト

pm2-オフィシャル

pm2-GitHub