systemd で Node.js アプリをバックグラウンドサービスとして実行する

2024-04-02

Node.jsアプリをバックグラウンドサービスとして実行する方法

nohupコマンドは、ターミナルが閉じてもプロセスが続行するようにします。

メリット

  • 手軽に実行できる
  • プロセスの終了処理がうまくいかない場合がある
  • ログ管理が難しい
  • クラッシュ時の復旧が難しい

使用方法

nohup node app.js &

pm2を使う

pm2は、Node.jsアプリケーションをデーモン化し、それを管理するためのツールです。

  • クラッシュ復旧
  • ログ管理
  • ダウンタイムなしのリロード
  • 設定が少し複雑
npm install pm2 -g
pm2 start app.js

systemdは、Linuxディストリビューションで使用されているサービス管理ツールです。

  • 高度な設定が可能
  • 他のサービスとの連携
  1. systemdサービスファイルを作成
  2. サービスファイルを有効化
  3. サービスを起動

詳細は、systemdのドキュメントを参照してください。

Foreverは、pm2と似たような機能を持つツールです。

  • pm2よりも軽量
  • 設定が簡単
  • pm2ほど機能が豊富ではない
npm install forever -g
forever start app.js
  • 手軽に実行したい場合は、nohupコマンドを使う。
  • クラッシュ復旧やログ管理が必要な場合は、pm2を使う。
  • 高度な設定が必要な場合は、systemdを使う。
  • 軽量なツールを使いたい場合は、Foreverを使う。
  • バックグラウンドサービスとして実行する場合は、ログファイルの出力方法を検討する必要があります。
  • アプリケーションがクラッシュした場合に備えて、復旧方法を検討する必要があります。

注意

  • 使用する前に、各ツールのドキュメントをよく読んでください。



app.js

const express = require('express');

const app = express();

app.get('/', (req, res) => {
  res.send('Hello, World!');
});

app.listen(3000);
npm install pm2 -g
pm2 start app.js

systemdを使う場合

  1. 以下の内容で /etc/systemd/system/app.service ファイルを作成します。
[Unit]
Description=My Node.js App

[Service]
Type=simple
ExecStart=node app.js

[Install]
WantedBy=multi-user.target
  1. 以下のコマンドを実行してサービスファイルを有効化します。
systemctl enable app.service
systemctl start app.service

nohupコマンドを使う場合

nohup node app.js &

Foreverを使う場合

npm install forever -g
forever start app.js

上記以外にも、Node.jsアプリをバックグラウンドサービスとして実行する方法があります。 詳細については、上記の参考資料を参照してください。

注意事項

  • 上記のコードは、あくまでもサンプルです。 実際の環境に合わせて変更する必要があります。



Node.jsアプリをバックグラウンドサービスとして実行するその他の方法

Windows サービスとして実行する

Windows では、Node.jsアプリをWindowsサービスとして登録することで、バックグラウンドサービスとして実行することができます。

  • Windows標準機能で実現できる
  • 設定ファイルを手動で編集する必要がある
  • 他のOSでは使用できない
  1. Node.jsアプリをサービスとして実行するためのモジュールをインストールします。
  2. サービス設定ファイルを作成します。
  3. サービスをインストールします。

Dockerは、アプリケーションとその環境をまとめてパッケージ化できるツールです。 Dockerを使ってNode.jsアプリをイメージとして作成し、コンテナとして実行することで、バックグラウンドサービスとして実行することができます。

  • 環境構築が容易
  • 他のOSでも実行できる
  • 拡張性が高い
  1. Dockerfileを作成します。
  2. イメージをビルドします。

Herokuは、PaaS (Platform as a Service) と呼ばれるサービスで、サーバーの管理や運用をせずにアプリケーションを開発・実行することができます。 Herokuを使ってNode.jsアプリをデプロイすることで、バックグラウンドサービスとして実行することができます。

  • サーバー管理が不要
  • 簡単にデプロイできる
  • スケーラブル
  • 無料プランでは機能が制限されている
  • カスタマイズ性が低い
  1. Herokuアカウントを作成します。
  2. Heroku CLIをインストールします。
  3. アプリケーションをHerokuにデプロイします。

AWS Lambdaは、サーバーレスコンピューティングサービスです。 AWS Lambdaを使ってNode.jsコードを実行することで、バックグラウンドサービスとして実行することができます。

  • 従量課金制
  • コードの複雑さが制限される
  • すべてのユースケースに適しているわけではない
  1. AWS Lambdaコンソールを開きます。
  2. Lambda関数を作成します。
  • 手軽に実行したい場合は、Windowsサービスとして実行するか、Herokuを使う。
  • 環境構築が容易で、他のOSでも実行したい場合は、Dockerを使う。
  • サーバー管理が不要で、スケーラブルな環境を求めている場合は、AWS Lambdaを使う。
  • 使用する前に、各方法のドキュメント

node.js process background


Node.js の fs.readFile() 関数が文字列ではなくバッファーを返す理由

効率性バッファーは、ファイルの内容をメモリに効率的に格納する方法です。文字列に変換するよりも少ないメモリを使用し、処理速度も速くなります。エンコーディングの柔軟性ファイルの内容は、さまざまなエンコーディングで保存されている可能性があります。バッファーを使用すると、エンコーディングを指定せずにファイルの内容を読み込むことができ、後で必要に応じて好きなエンコーディングに変換できます。...


Node.jsをパッケージマネージャーを使って更新する方法

NVM (Node Version Manager) は、Node. jsのバージョン管理ツールです。 NVMを使うと、複数のバージョンのNode. jsを簡単にインストール、切り替え、削除することができます。NVMをインストールしていない場合は、以下のコマンドを実行してインストールします。...


Sequelize.js で SQL クエリをトラブルシューティングする: 問題を迅速かつ簡単に解決

logging オプションを使用するSequelize. js の logging オプションを使用すると、生成された SQL をコンソールに出力することができます。このオプションは、Sequelize インスタンスを作成する際に設定します。...


Socket.IO接続の認証を徹底解説!JWT、セッションID、ミドルウェアのメリットとデメリット

このチュートリアルでは、Node. js、Socket. IO、JSON Web Token (JWT) を使って、Socket. IO接続を認証する方法を説明します。認証を行うことで、不正なユーザーによる接続を防止し、アプリケーションのセキュリティを強化することができます。...


もう古い Node.js にさよなら! Ubuntu 16.04 で最新バージョンにアップデートする方法

このチュートリアルでは、Ubuntu 16. 04 で Node. js を 2 つの方法で更新する方法を説明します。NVM (Node Version Manager) を使用するAPT パッケージ マネージャーを使用するNVM を使用する...


SQL SQL SQL SQL Amazon で見る



【保存版】Node.jsアプリケーションを独自プロセスで実行する方法:child_process、PM2、systemd徹底比較

child_processモジュールは、Node. jsアプリケーションから他のプロセスを生成および管理するためのツールを提供します。この方法は、次のような場合に役立ちます。アプリケーションをワーカープロセスに分割したい場合長時間実行されるタスクを非同期に実行したい場合


systemd を使用して Node.js アプリケーションをサービスとして実行する方法

pm2 を使用する:pm2 は、Node. js アプリケーションを管理するためのプロセスマネージャーです。pm2 を使用すると、アプリケーションをバックグラウンドプロセスとして実行し、クラッシュした場合に自動的に再起動することができます。


Node.jsサーバーをデーモンプロセス化する3つの方法:それぞれのメリットとデメリット

foreverモジュールは、Node. jsアプリケーションを永続的に実行するためのツールです。インストール方法は以下の通りです。インストール後、以下のコマンドを実行することで、Node. jsサーバーをデーモンプロセスとして起動できます。


AWS Lambda を使って Node.js アプリケーションを永続的に実行する

プロセスマネージャーは、Node. jsアプリケーションをデーモン化し、システム起動時に自動的に起動したり、クラッシュ時に自動的に再起動したりすることができます。代表的なプロセスマネージャーPM2 - PM2: URL PM2 は、Node