【Node.js】 Expressをデーモン化する
Node.js
の Express
をデーモン化したい。
デーモン化するにはforever
を使うといいみたいな記事があったけど、 systemctl enable
で自動起動したかったので systemd
でデーモン化することにした
前提
対応内容
1. デーモンで実行するスクリプトを作成する
# わかりやすいように express.sh とする # 同じディレクトリにexpressを実行するjsファイル(server.js)がある前提 $vi /path/to/express.sh $chmod 755 /path/to/express.sh
#!/bin/bash /home/user/.nvm/versions/node/v18.3.0/bin/node /path/to/server.js
2. systemdのユニットファイルを作成する
作成したスクリプトファイルを実行するためのユニットファイルを作成する
ユニットファイルができることで systemctl start fooservice
のような使い方ができるようになる
ユニットファイルは /etc/systemd/system
に作成する。
WantedBy=multi-user.target
と記載すると systemctl enable fooservice
としたときに /etc/systemd/sytem/multi-user.target.wants/
にシンボリックリンクが張られる
# わかりやすいようにサービス名を node-express とする $ vi /etc/systemd/system/node-express.service $ chmod 775 /etc/systemd/system/node-express.service
[Unit] Description=Nodejs Express Server [Service] Type=simple ExecStart=/path/to/express.sh [Install] WantedBy=multi-user.target
3. ユニットファイルのインストール状況を確認し起動してみる
systemctl list-unit-files
で作成したユニットファイルのインストール状況を確認する。
一覧に表示されればOK
$ sudo systemctl list-unit-files | grep express node-express.service disabled
systemctl start node-express
でエラーなく起動できれば完了
$ sudo systemctl start node-express $ sudo systemctl status node-express ● node-express.service - Nodejs Express Server Loaded: loaded (/etc/systemd/system/node-express.service; disabled; vendor preset: enabled) Active: active (running) since Fri 2022-06-03 01:45:42 UTC; 3s ago Main PID: 28843 (express.sh) Tasks: 8 (limit: 1132) Memory: 25.0M CGroup: /system.slice/node-express.service ├─28843 /bin/bash /path/to/express.sh └─28844 /home/user/.nvm/versions/node/v18.3.0/bin/node /path/to/server.js