@Satoh_D no blog

大分にUターンしたので記念に。調べたこととか作ったこととか食べたこととか

【Node.js】 Expressをデーモン化する

Node.jsExpress をデーモン化したい。 デーモン化するには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

参考サイト