Nodejsの起動にpm2を使用する
nodejsの起動にforeverを使っていたのですが、pm2と出会い、サーバー再起動時の自動起動なんかもやってくれるので、そちらを試してみました。
※foreverででも、crontabを利用して自動起動はやってますが。。。
pm2オフシャルサイト:https://pm2.keymetrics.io/
1)インストール
$ sudo npm install pm2 -g
:
npm notice
npm notice New major version of npm available! 8.19.3 -> 9.4.1
npm notice Changelog: https://github.com/npm/cli/releases/tag/v9.4.1
npm notice Run npm install -g npm@9.4.1 to update!
npm notice
npmをバージョンアップしろと言ってますんで、従います。
$ sudo npm install -g npm@9.4.1
2)pm2で起動してみます。
expressで作ったのを起動してみます。
$ pm2 start bin/www
[PM2] Starting /var/www/sapp/sapp/bin/www in fork_mode (1 instance)
[PM2] Done.
$ pm2 start bin/www –name test-proc
なんてやると名前をつけることができます。
複数走らせるときなんか便利ですね!
3)止めてみます。
$ pm2 stop 0
[PM2] Applying action stopProcessId on app [0](ids: [ ‘0’ ])
[PM2] [www](0) ✓
stoopedとなりました。
再度起動するときは
$ pm2 start 0
ってIDでできました。
再起動は pm2 restart 0 なんて感じでできます。
4)自動起動の設定をする
さて、今回の主目的であるサーバー再起動時の自動起動の設定をやってみます。
・再起動をするためのコマンドを生成します。
$ pm2 startup
[PM2] Init System found: systemd
[PM2] To setup the Startup Script, copy/paste the following command:
sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u ubuntu –hp /home/ubuntu
・コマンドを実行します。
$ sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u ubuntu –hp /home/ubuntu
[PM2] Init System found: systemd
Platform systemd
Template
[Unit]
Description=PM2 process manager
Documentation=https://pm2.keymetrics.io/
After=network.target
[Service]
Type=forking
User=ubuntu
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/bin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
Environment=PM2_HOME=/home/ubuntu/.pm2
PIDFile=/home/ubuntu/.pm2/pm2.pid
Restart=on-failure
ExecStart=/usr/lib/node_modules/pm2/bin/pm2 resurrect
ExecReload=/usr/lib/node_modules/pm2/bin/pm2 reload all
ExecStop=/usr/lib/node_modules/pm2/bin/pm2 kill
[Install]
WantedBy=multi-user.target
Target path
/etc/systemd/system/pm2-ubuntu.service
Command list
[ ‘systemctl enable pm2-ubuntu’ ]
[PM2] Writing init configuration in /etc/systemd/system/pm2-ubuntu.service
[PM2] Making script booting at startup…
[PM2] [-] Executing: systemctl enable pm2-ubuntu…
Created symlink /etc/systemd/system/multi-user.target.wants/pm2-ubuntu.service → /etc/systemd/system/pm2-ubuntu.service.
[PM2] [v] Command successfully executed.
+—————————————+
[PM2] Freeze a process list on reboot via:
$ pm2 save
[PM2] Remove init script via:
$ pm2 unstartup systemd
・サーバーを再起動します。
起動してくれましたねぇ。。。(^^)
終わりに。。
pm2では自分がオーナーのプロセスについて情報が閲覧できます。
他の人が起動したのは見れないようです。。まぁ、当たり前か。。
でも今全体としてどんなのが動いているのか見たいときがあります。
$ sudu pm2 ls
なんてやってみたのですが、見れなかったです。
これは要調査です。
また、pm2にはプロセスの状態を見る機能があります。
$ pm2 monit
メモリの状態なんかが見れます。
とりあえずは、こちらを使ってみる予定です。