Node.js PM2をサーバー再起動後も自動起動するように登録
仮想サーバーがメンテナンスで再起動しても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 >