PM2 プロセス管理クイックスタート
PM2は、アプリケーションの管理とオンライン状態の維持に役立つデーモンプロセス マネージャーです。 PM2を使い始めるのは簡単で、NPM経由でインストール可能なシンプルで直感的なCLIとして提供されています。
インストール
最新のPM2バージョンはNPMまたはYarnでインストールできます
$ npm install pm2@latest -g
# or
$ yarn global add pm2
Node.jsとNPMをインストールするには、NVMを使用できます
アプリの起動
アプリケーションを起動、デーモン化、および監視する最も簡単な方法は、このコマンドラインを使用することです
$ pm2 start app.js
または、他のアプリケーションを簡単に起動します
$ pm2 start bashscript.sh
$ pm2 start python-app.py --watch
$ pm2 start binary-file -- --port 1520
CLIに渡すことができるオプション
# Specify an app name
--name <app_name>
# Watch and Restart app when files change
--watch
# Set memory threshold for app reload
--max-memory-restart <200MB>
# Specify log file
--log <log_path>
# Pass extra arguments to the script
-- arg1 arg2 arg3
# Delay between automatic restarts
--restart-delay <delay in ms>
# Prefix logs with time
--time
# Do not auto restart app
--no-autorestart
# Specify cron for forced restart
--cron <cron_pattern>
# Attach to application log
--no-daemon
ご覧のとおり、PM2でアプリケーションを管理するために多くのオプションが用意されています。ユースケースに応じてそれらを発見するでしょう。
プロセスの管理
アプリケーションの状態管理は簡単です。コマンドは次のとおりです。
$ pm2 restart app_name
$ pm2 reload app_name
$ pm2 stop app_name
$ pm2 delete app_name
app_name
の代わりに以下を渡すことができます
all
: すべてのプロセスを対象とするid
: 特定のプロセスIDを対象とする
ステータス、ログ、メトリクスの確認
このアプリケーションを起動したので、そのステータス、ログ、メトリクスを確認し、pm2.ioでオンラインダッシュボードを取得することもできます。
管理対象アプリケーションの一覧表示
PM2によって管理されているすべてのアプリケーションのステータスを一覧表示します
$ pm2 [list|ls|status]
ログの表示
ログをリアルタイムで表示するには
$ pm2 logs
古いログを掘り下げるには
$ pm2 logs --lines 200
ターミナルベースのダッシュボード
これは、ターミナルに直接収まるリアルタイムダッシュボードです
$ pm2 monit
pm2.io:監視および診断Webインターフェース
Webベースのダッシュボード、診断システムを備えたクロスサーバー
$ pm2 plus
クラスタモード
Node.jsアプリケーションの場合、PM2には、生成された各プロセス間でHTTP [s] / Websocket / TCP / UDP接続をすべて共有する自動ロードバランサーが含まれています。
クラスタモードでアプリケーションを起動するには
$ pm2 start app.js -i max
クラスタモードの詳細については、こちらをご覧ください。
エコシステムファイル
エコシステムファイルと呼ばれる設定ファイルを作成して、複数のアプリケーションを管理することもできます。エコシステムファイルを生成するには
$ pm2 ecosystem
これにより、ecosystem.config.jsファイルが生成されます
module.exports = {
apps : [{
name: "app",
script: "./app.js",
env: {
NODE_ENV: "development",
},
env_production: {
NODE_ENV: "production",
}
}, {
name: 'worker',
script: 'worker.js'
}]
}
そして簡単に起動します
$ pm2 start ecosystem.config.js
アプリケーション宣言の詳細については、こちらをご覧ください。
スタートアップスクリプトの設定
サーバーの起動/再起動時に管理しているプロセスでPM2を再起動することは非常に重要です。これを解決するには、このコマンドを実行してアクティブなスタートアップスクリプトを生成するだけです
$ pm2 startup
そして、自動再起動のためにプロセスリストをフリーズするには
$ pm2 save
スタートアップスクリプトジェネレーターの詳細については、こちらをご覧ください。
変更時のアプリケーションの再起動
--watch
オプションを使用すると非常に簡単です
$ cd /path/to/my/app
$ pm2 start env.js --watch --ignore-watch="node_modules"
これは、現在のディレクトリとすべてのサブフォルダーからのファイルの変更を監視してアプリを再起動し、node_modulesフォルダー--ignore-watch="node_modules"
の変更を無視します。
その後、pm2 logs
を使用して、再起動されたアプリのログを確認できます。
PM2のアップデート
私たちはそれをシンプルにしました。リリース間に重大な変更はなく、手順は簡単です
npm install pm2@latest -g
次に、メモリ内のPM2を更新します
pm2 update
チートシート
知っておく価値のあるコマンドをいくつか紹介します。サンプルアプリケーションまたは開発マシンの現在のWebアプリケーションで試してみてください
# Fork mode
pm2 start app.js --name my-api # Name process
# Cluster mode
pm2 start app.js -i 0 # Will start maximum processes with LB depending on available CPUs
pm2 start app.js -i max # Same as above, but deprecated.
pm2 scale app +3 # Scales `app` up by 3 workers
pm2 scale app 2 # Scales `app` up or down to 2 workers total
# Listing
pm2 list # Display all processes status
pm2 jlist # Print process list in raw JSON
pm2 prettylist # Print process list in beautified JSON
pm2 describe 0 # Display all information about a specific process
pm2 monit # Monitor all processes
# Logs
pm2 logs [--raw] # Display all processes logs in streaming
pm2 flush # Empty all log files
pm2 reloadLogs # Reload all logs
# Actions
pm2 stop all # Stop all processes
pm2 restart all # Restart all processes
pm2 reload all # Will 0s downtime reload (for NETWORKED apps)
pm2 stop 0 # Stop specific process id
pm2 restart 0 # Restart specific process id
pm2 delete 0 # Will remove process from pm2 list
pm2 delete all # Will remove all processes from pm2 list
# Misc
pm2 reset <process> # Reset meta data (restarted time...)
pm2 updatePM2 # Update in memory pm2
pm2 ping # Ensure pm2 daemon has been launched
pm2 sendSignal SIGUSR2 my-app # Send system signal to script
pm2 start app.js --no-daemon
pm2 start app.js --no-vizion
pm2 start app.js --no-autorestart
次にすることは?
すべてのアプリケーションの動作オプションをJSON設定ファイルに宣言する方法を学びます。
信頼性を高めるために、クリーン停止と再起動を実行する方法を学びます。
本番アプリケーションを簡単にデプロイおよび更新する方法を学びます。
PM2.ioで本番アプリケーションを監視します。
PM2のアップデート方法
最新のpm2バージョンをインストールします
npm install pm2@latest -g
次に、メモリ内のPM2を更新します
pm2 update