ラズパイ起動と共にpm2でスクリプト起動の記事をnodebrewでインストールした環境でやってみました。
流れ
- 永続化させるプロセスをpm2で起動
-
pm2 startup
を実行- ヒントっぽいのがでる
- 無視して↓の
sudo env~
を実行
- pm2 saveで保存
まずは永続化
pm2 start app.js
ここで永続化したプロセスが↓の手順で記憶される模様です。
pm2 startup
$ pm2 startup
色々でるけどスルーして↓の行を実行。
ここの行が全てな気がした。
sudo env PATH=$PATH:/home/pi/.nodebrew/current/bin /home/pi/.nodebrew/current/bin/pm2 startup systemd -u pi --hp /home/pi
ちなみにpm2 startupすると出てくる
sudo env PATH=$PATH:/home/pi/.nodebrew/node/v11.6.0/bin /home/pi/.nodebrew/node/v11.6.0/lib/node_modules/pm2/bin/pm2 startup systemd -u pi --hp /home/pi
などのコマンドはバージョンがv11.6.0みたいに固定で書いてあるので、これをコピペしてしまうとNode.jsのバージョンが変わってしまったら対応できなくなってしまいそう
↓こんな感じのログが出ます。利用しているcurrentバージョン(↓v11.6.0)のパスを自動的に設定してくれてますね。
[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=pi
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
Environment=PATH=/home/pi/.nodebrew/node/v11.6.0/bin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
Environment=PM2_HOME=/home/pi/.pm2
PIDFile=/home/pi/.pm2/pm2.pid
ExecStart=/home/pi/.nodebrew/node/v11.6.0/lib/node_modules/pm2/bin/pm2 resurrect
ExecReload=/home/pi/.nodebrew/node/v11.6.0/lib/node_modules/pm2/bin/pm2 reload all
ExecStop=/home/pi/.nodebrew/node/v11.6.0/lib/node_modules/pm2/bin/pm2 kill
[Install]
WantedBy=multi-user.target
Target path
/etc/systemd/system/pm2-pi.service
Command list
[ 'systemctl enable pm2-pi' ]
[PM2] Writing init configuration in /etc/systemd/system/pm2-pi.service
[PM2] Making script booting at startup...
[PM2] [-] Executing: systemctl enable pm2-pi...
[PM2] [v] Command successfully executed.
+---------------------------------------+
[PM2] Freeze a process list on reboot via:
$ pm2 save
[PM2] Remove init script via:
$ pm2 unstartup systemd
保存
$ pm2 save
再起動して確認
- 再起動
$ sudo reboot
- 再起動後に確認するとappのプロセスが立ち上がってます。
$pm2 list
┌──────────┬────┬─────────┬──────┬─────┬────────┬─────────┬────────┬──────┬───────────┬──────┬──────────┐
│ App name │ id │ version │ mode │ pid │ status │ restart │ uptime │ cpu │ mem │ user │ watching │
├──────────┼────┼─────────┼──────┼─────┼────────┼─────────┼────────┼──────┼───────────┼──────┼──────────┤
│ app │ 0 │ N/A │ fork │ 878 │ online │ 1 │ 67s │ 0.2% │ 37.5 MB │ pi │ disabled │
└──────────┴────┴─────────┴──────┴─────┴────────┴─────────┴────────┴──────┴───────────┴──────┴──────────┘
自動起動を解除する
自動起動に設定したスクリプトが悪さしてるみたいで、一旦解除したくなりました。
pm2 unstartup systemd
さっきとほぼ一緒ですが、~~ unstartup sytemd ~~
という形で unstartupになってるので注意しましょう。
sudo env PATH=$PATH:/home/pi/.nodebrew/current/bin /home/pi/.nodebrew/current/bin/pm2 unstartup systemd -u pi --hp /home/pi
ここもstartupの箇所がunstartupに
所感
Pythonのスクリプトは/etc/rc.local
とかでやってたので新鮮。