foreverで起動していたExpressのサーバをOS再起動時に自動起動させたかったのでSystemd管理に移行します。
initd向けにforeverの自動起動の仕組みを提供するinitd-forever
というパッケージもあったり、forever自体を起動する方向もアリですが、Systemdでは自動再起動の制御が細かくなっているなど、foreverに期待していた役割自体も担えそうでしたのでシンプルにSystemd → Nodeにしました。
最低限の設定をイメージしてこんな感じになりました。
[Unit]
Description=My Node.js Daemon
[Service]
User=myuser
Group=mygroup
#Environment="NODE_ENV=production"
WorkingDirectory=/path/to/
ExecStart=/usr/bin/node app.js
Restart=always
[Install]
WantedBy=multi-user.target
あとは
systemctl enable mydaemon.service
で自動起動有効化し、
systemctl start mydaemon.service
で起動します。
User
/Group
は指定しなければrootになってしまうため指定しています。
Environment
は今回不要でしたがExpressで使う機会が多そうなのでコメントアウト状態でサンプルとして入れています。
対象のスクリプトはnode app.js
で起動して、Ctrl+Cで終了させるような動きになっている必要があります。
Restart=always
によってプロセスが落ちても自動的に復帰させます。
デフォルトで10秒に5回の再起動に制限されますがStartLimitInterval
StartLimitBurst
で調整できます。
foreverのwatch
に対応する機能は無さそうですが今回の目的には不要でした。