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] | boolean | false | trueの場合、独立したPM2が実行され、スクリプトの終了時に自動的に終了します。 |
fn | function | コールバック |
-
noDaemonMode: 最初の引数にtrueが渡された場合、pm2はデーモンとして実行されず、関連するスクリプトが終了すると終了します。デフォルトでは、pm2はスクリプトの終了後も存続します。pm2が既に実行されている場合、スクリプトは既存のデーモンにリンクしますが、プロセスが終了すると終了します。
script
- 実行するスクリプトのパス。jsonConfigFile
-options
パラメータと同じオプションを含むことができるJSONファイルのパス。errback(err,proc)
-script
が開始されたときに呼び出されるerrback。proc
パラメータはpm2プロセスオブジェクトになります。options
- 次のオプションを含むオブジェクト(これらのオプションの詳細な説明はこちら)name
- 後続のコマンドでプロセスと対話する(例:再起動)ために使用できる任意の名前。拡張子を除いたスクリプト名(例:"testScript.js"
の場合"testScript"
)がデフォルト。script
- 実行するスクリプトのパス。args
- スクリプトに渡す引数からなる文字列または文字列の配列。interpreterArgs
- インタープリタプロセスを呼び出す引数からなる文字列または文字列の配列。例:「–harmony」または[”–harmony”,”–debug”]。interpreter
が「none」以外の場合にのみ適用されます(デフォルトは「node」)。cwd
- プロセスを開始する作業ディレクトリ。output
- (デフォルト:"~/.pm2/logs/app_name-out.log"
)stdout出力を追加するファイルへのパス。error
と同じファイルにすることができます。error
- (デフォルト:"~/.pm2/logs/app_name-error.err"
)stderr出力を追加するファイルへのパス。output
と同じファイルにすることができます。logDateFormat
- ログタイムスタンプの表示形式(例:「YYYY-MM-DD HH:mm Z」)。形式はmoment表示形式です。pid
- (デフォルト:"~/.pm2/pids/app_name-id.pid"
)開始されたプロセスのpidを書き込むファイルへのパス。ファイルは上書きされます。pm2ではこのファイルは使用されないため、ユーザーはいつでも自由に操作または削除できます。プロセスが停止するかデーモンがキルされると、ファイルは削除されます。minUptime
- 成功した開始と見なされる前のスクリプトの最小稼働時間。maxRestarts
-minUptime
未満で終了した場合にスクリプトが連続して再起動される最大回数。maxMemoryRestart
- 設定されており、script
のメモリ使用量が設定された数値を超えた場合、pm2はscript
を再起動します。人間に分かりやすい接尾辞を使用します:「K」はキロバイト、「M」はメガバイト、「G」はギガバイトなど。例:「150M」。killTimeout
- (デフォルト:1600
)stop
またはrestart
コマンドがSIGINT
シグナルを発行した後、SIGKILL
シグナルでスクリプトを強制的にキルするまで待機するミリ秒数。restartDelay
- (デフォルト:0
)終了したスクリプトを再起動する前に待機するミリ秒数。interpreter
- (デフォルト:'node'
)スクリプトのインタープリター(例:「python」、「ruby」、「bash」など)。「none」値は、バイナリ実行ファイルとして「script」を実行します。execMode
- (デフォルト:'fork'
)「cluster」に設定すると、クラスタリングが有効になります(script
の複数のインスタンスを実行)。詳細はこちら。instances
- (デフォルト:1
)作成するscript
のインスタンス数。exec_mode
が「cluster」の場合にのみ関連します。mergeLogs
- (デフォルト:false
)trueの場合、script
のすべてのインスタンスのログファイルを1つのstderrログと1つのstdoutログにマージします。「cluster」モードでのみ適用されます。たとえば、pm2を介して開始された「test.js」の4つのインスタンスがある場合、通常は4つのstdoutログファイルと4つのstderrログファイルがありますが、このオプションをtrueに設定すると、stdoutファイルとstderrファイルは1つだけになります。watch
-true
に設定されている場合、script
ファイルの変更時にアプリケーションが再起動されます。force
(デフォルト:false
) デフォルトでは、pm2は既に実行されていないスクリプトのみを開始します(スクリプトはアプリケーションへのパスであり、既に実行されているアプリケーションの名前ではありません)。force
がtrueに設定されている場合、pm2はそのスクリプトの新しいインスタンスを開始します。autorestart
(デフォルトtrue
)。false
の場合、pm2は正常な完了またはプロセス失敗後に再起動を試行しません。cron
executeCommand
write
sourceMapSupport
disableSourceMapSupport
ローカルPM2からの切断
pm2.start(process, fn)
プロセスの開始
パラメータ | 型 | 説明 |
---|---|---|
process | string/object | スクリプトパス(相対パス)またはオプションによるオブジェクト |
fn | function | コールバック |
pm2.stop(process, fn)
プロセスの停止
パラメータ | 型 | 説明 |
---|---|---|
process | string/number | ターゲットプロセスのIDまたは名前 |
fn | function | コールバック |
pm2.restart(process, [options], fn)
プロセスの再起動
パラメータ | 型 | 説明 |
---|---|---|
process | string/number | ターゲットプロセスのIDまたは名前 |
[options] | object | オプション(updateEnv: trueを追加して強制的に更新することもできます) |
fn | function | コールバック |
pm2.reload(process, fn)
プロセスのリロード
パラメータ | 型 | 説明 |
---|---|---|
process | string/number | ターゲットプロセスのIDまたは名前 |
fn | function | コールバック |
pm2.delete(process, fn)
プロセスの削除
パラメータ | 型 | 説明 |
---|---|---|
process | string/number | ターゲットプロセスのIDまたは名前 |
fn | function | コールバック |
pm2.killDaemon(fn)
pm2デーモンをキルします(pm2 killと同じ)。デーモンがキルされると、そのすべてのプロセスもキルされることに注意してください。また、キルした後でも、デーモンから明示的に切断する必要があることにも注意してください。
pm2.describe(process, fn)
ターゲットプロセスからすべてのメタデータを取得します。
パラメータ | 型 | 説明 |
---|---|---|
process | string/number | ターゲットプロセスのIDまたは名前 |
fn | function | コールバック |
pm2.list(fn)
PM2で管理されているすべてのプロセスを取得します。
高度なメソッド
pm2.sendDataToProcessId(packet)
ターゲットプロセスにデータを送信します。
パラメータ | 型 | 説明 |
---|---|---|
packet.id | number | ターゲットプロセスのID |
packet.type | string | process:msgでなければなりません |
packet.topic | boolean | trueでなければなりません |
packet.data | object | ターゲットプロセスに送信されるオブジェクトデータ |
データは、ターゲットプロセスで以下を使用して受信されます。
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 | string | システムシグナル名 |
process | string | ターゲットプロセスの名前 |
fn | function | コールバック(err, process) |
pm2.sendSignalToProcessId(signal, process, fn)
ターゲットプロセスのIDにカスタムシステムシグナルを送信します。
パラメータ | 型 | 説明 |
---|---|---|
signal | string | システムシグナル名 |
process | number | ターゲットプロセスのID |
fn | function | コールバック(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 - “online”(オンライン), “stopping”(停止中), “stopped”(停止済), “launching”(起動中), “errored”(エラー), または “one-launch-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
}
});
});