Logicky Blog

Logickyの開発ブログです

PM2でNode.jsのプログラムを自動起動させる(Amazon Linux 2)

参考:

やり方

  • pm2 starup を実行すると、実行すべきコマンドが表示される。それを実行する。
  • 上記を実行すると、/etc/systemd/system/pm2-ec2-user.service が作成された。
  • pm2 save を実行すると、~/.pm2/dump.pm2が作成(更新)された。

メモ

  • dump.pm2 に、pm2で実行したいプログラムが記録されていた。現在pm2で実行しているプログラムを自動起動させたい場合、pm2 saveを実行したらいいらしい。
  • pm2 startupで表示されるコマンドは、上記のdump.pm2で記録されているプログラムをpm2で自動起動させるためのコマンド。
  • 新しいNode.jsバージョンにアップグレードする場合は、PM2起動スクリプトを更新してください。pm2 unstartup 最初に使用し、pm2 startup もう一度使用する
$ pm2 startup
[PM2] Init System found: systemd
ec2-user
[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 ec2-user --hp /home/ec2-user
$ sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u ec2-user --hp /home/ec2-user
$pm2 save

pm2-ec2-userを確認してみる

$ systemctl status pm2-ec2-user
● pm2-ec2-user.service - PM2 process manager
   Loaded: loaded (/etc/systemd/system/pm2-ec2-user.service; enabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: https://pm2.keymetrics.io/
$ systemctl is-enabled pm2-ec2-user
enabled

pm2-ec2-userの中身

[Unit]
Description=PM2 process manager
Documentation=https://pm2.keymetrics.io/
After=network.target

[Service]
Type=forking
User=ec2-user
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
Environment=PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ec2-user/.local/bin:/home/ec2-user/bin:/usr/bin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
Environment=PM2_HOME=/home/ec2-user/.pm2
PIDFile=/home/ec2-user/.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

pm2 resurrectを実行してみる

  • pm2 resurrect は、以前にダンプされたプロセスを復活させる。
  • pm2 del で、pm2で実行中(pm2 saveで保存した)のプロセスを削除して、pm2 resurrect を実行すると、復活しました。