JavaScript - node + express(MQTT・定時処理) - サービス化


クラウディア 


1. 概要
2. サービス化
3. ログ出力
4. 参考サイト

1. 概要

 サービス化します。

2. サービス化

 「root」ユーザ権限で。

sudo vi /etc/systemd/system/node-server.service
 下記を記述します。

[Unit]
Description=Node.js App
After=network.target

[Service]
ExecStart=/usr/bin/node /path/to/server.js
WorkingDirectory=/path/to
Restart=always
RestartSec=5
User=www-data
Environment=NODE_ENV=production

[Install]
WantedBy=multi-user.target
 上記で、「/usr/bin/node」の場所は、実際に動作させる「node」のパスを記述します。  「/path/to」の箇所は、プロジェクトディレクトリのパスを記述します。  作成したものを、読み直し・有効化・起動します。

systemctl daemon-reload

systemctl enable node-server

systemctl start node-server
 起動を確認します。

systemctl status node-server
 およそ下記のように表示されれば、サービスは起動しています。

● node-server.service - Node.js App
     Loaded: loaded (/etc/systemd/system/node-server.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2025-11-18 00:38:41 UTC; 5s ago
   Main PID: 1183 (MainThread)
      Tasks: 7 (limit: 4558)
     Memory: 19.7M
        CPU: 583ms
     CGroup: /system.slice/node-server.service
             mq1183 /usr/bin/node /path/to/server.js

Nov 18 00:38:41 ubuntu2204 systemd[1]: Started Node.js App.
 これで、システムが再起動しても、「node」サーバが起動するようになります。

3. ログ出力

 「server.js」内に。

console.log()
 で出力しているものが、デーモン化してしまうと、出力先がないため見えなくて困ります。  ログファイルに出力するには。

sudo vi /etc/systemd/system/node-server.service
 「Service」セクションに、下記の形式で記述します。

StandardOutput=file:/path/to/myapp.log
StandardError=file:/path/to/myapp-error.log
 これで、ログ、エラーログが、それぞれ。

/path/to/myapp.log
/path/to/myapp-error.log
 に出力されます。  2つを同じファイルを指定してもよいです。  サービスの所有者が「root」でない場合は、下記の要領で、ファイルの作成と所有権の設定を行っておきます。

sudo touch /var/log/myapp.log
sudo chown ubuntu:ubuntu /var/log/myapp.log
 その上で。

sudo systemctl daemon-reload
sudo systemctl start node-server
 すれば、ログが指定したファイルへ出力されるようになります。  これは、日付がつかなくて、不満だったので、別解を次ページに記述することにします。

4. 参考サイト

 本ページは、「ChatGPT」軍曹を参考にさせていただきました。

EaseUS
AbemaTV 無料体験
それがだいじWi-Fi