Node.js PM2をサーバー再起動後も自動起動するように登録

pm2_nodejs仮想サーバーがメンテナンスで再起動してもPM2が自動起動するように設定したときの覚書。

環境: CentOS 7.2.1511, Node.js 4.6.2, PM2 2.1.6

PM2はNode.js向けの高機能プロセスマネージャー。自動起動のスクリプトを自動生成してくれる機能がある。

$ pm2 startup

[PM2] You have to run this command as root. Execute the following command:
      sudo su -c "env PATH=$PATH:/home/node/.nvm/versions/node/v4.6.2/bin pm2 startup linux -u node --hp /home/node"


rootになって、言われた通りのコマンドを実行してみる
# sudo su -c "env PATH=$PATH:/home/node/.nvm/versions/node/v4.6.2/bin pm2 startup linux -u node --hp /home/node"

-bash: sudo: コマンドが見つかりません


sudoなしで実行
# su -c "env PATH=$PATH:/home/node/.nvm/versions/node/v4.6.2/bin pm2
startup linux -u node --hp /home/node"

bash: update-rc.d: コマンドが見つかりません


platformオプションをcentosに変更して実行
# su -c "env PATH=$PATH:/home/node/.nvm/versions/node/v4.6.2/bin pm2
startup centos -u node --hp /home/node"

[PM2] Done.

[PM2] Now you can type
$ pm2 save


nodeユーザーになって今のプロセスリストを保存
# su - node
# pm2 save


自動起動登録されているか確認
# chkconfig --list

スクリプト実体は/etc/init.d/に配置される。これをSysVが読み込んで実行される。

ちなみにCentOS7からはsystemdでサービス管理するようになったので、そちらで管理されているサービスを表示するにはsystemctlを使う。
# systemctl list-unit-files --state=enabled


SysVとsystemdの違いに関する参考サイト


Node.jsはnvmで管理しているのでNode.jsをアップデートしたら自動登録し直さないといけない。


< 2018/01/19 Modified >
nvm経由でnode.jsをアップデートしてみた。

pm2 startupしただけでは起動スクリプトが上書きされないので注意。

$ pm2 unstartup systemd
がエラーで登録できなかった。

rootになってpm2 startupのコマンドを実行
# env PATH=$PATH:/home/node/.nvm/versions/node/v6.12.3/bin /home/node/.nvm/versions/node/v6.12.3/lib/node_modules/pm2/bin/pm2 startup systemd -u node --hp /home/node

起動スクリプトを手動で修正
# less /etc/init.d/pm2-init.sh

nodeのバージョンが書かれた2箇所を修正。

nodeユーザーになってsaveしておく。
# su - node
$ pm2 save

再起動して確認。


< Related Posts >