CentOSでNode.jsサーバーを自動再起動:Foreverとsystemdで簡単実現
CentOSでNode.jsサーバーを自動的に再起動する方法:Foreverとsystemdの併用
このチュートリアルでは、CentOSシステム上でNode.jsサーバーを自動的に再起動する方法について説明します。この方法は、Foreverとsystemdサービスファイルの組み合わせを利用します。
Foreverは、Node.jsアプリケーションを監視し、クラッシュした場合に自動的に再起動するツールです。また、ログファイルをローテーションしたり、アプリケーションの起動時に実行するスクリプトを指定したりすることもできます。
systemdは、CentOSを含むLinuxシステム用のinitシステムです。systemdは、サービスの起動、停止、管理に使用できます。
手順
- Node.jsとForeverをインストールする
sudo yum install nodejs
npm install -g forever
- Node.jsアプリケーションを作成する
// app.js
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Hello from Node.js!');
});
app.listen(3000, () => {
console.log('Server listening on port 3000');
});
- Foreverを使用してNode.jsアプリケーションを起動する
forever start app.js
- systemdサービスファイルを作成する
[Unit]
Description=Forever Node.js app
After=network.target
[Service]
User=your_user
ExecStart=/usr/local/bin/forever start app.js
Restart=on-failure
[Install]
WantedBy=multi-user.target
上記の内容を [Node.jsアプリケーション名].service
という名前のファイルに保存します。
sudo systemctl enable [Node.jsアプリケーション名].service
sudo systemctl start [Node.jsアプリケーション名].service
説明
上記のステップにより、以下のことが行われます。
- Node.jsアプリケーション
app.js
が作成されます。 - Foreverを使用して、
app.js
がforever start
コマンドで起動されます。 - systemdサービスファイルが作成されます。このファイルは、systemdにNode.jsアプリケーションを監視し、必要に応じて再起動するように指示します。
注意事項
- 上記の例では、Node.jsアプリケーションが
/usr/local/bin
ディレクトリにあると仮定しています。Node.jsアプリケーションが別の場所にインストールされている場合は、ExecStart
ディレクティブをそれに応じて変更する必要があります。 - systemdサービスファイルを作成するには、root権限が必要です。
- Node.jsアプリケーションがログファイルを生成する場合は、systemdサービスファイルでログファイルの場所を指定する必要があります。
sudo yum install nodejs
npm install -g forever
// app.js
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Hello from Node.js!');
});
app.listen(3000, () => {
console.log('Server listening on port 3000');
});
forever start app.js
[Unit]
Description=Forever Node.js app
After=network.target
[Service]
User=your_user
ExecStart=/usr/local/bin/forever start app.js
Restart=on-failure
[Install]
WantedBy=multi-user.target
sudo systemctl enable [Node.jsアプリケーション名].service
sudo systemctl start [Node.jsアプリケーション名].service
上記のコードは、以下のことを行います。
CentOSでNode.jsサーバーを自動的に再起動する方法:その他の方法
PM2を使う
PM2は、Node.jsアプリケーションを管理するためのプロセスマネージャーです。PM2は、自動的に再起動する機能を含む、多くの機能を提供しています。
PM2を使用してNode.jsサーバーを自動的に再起動するには、以下の手順を実行します。
- PM2をインストールします。
npm install pm2 -g
pm2 start app.js
PM2は、Node.jsアプリケーションを監視し、必要に応じて再起動します。
nodemonは、Node.jsアプリケーションの開発を容易にするツールです。nodemonは、ファイルに変更が加えられるたびにNode.jsアプリケーションを自動的に再起動する機能を含む、多くの機能を提供しています。
npm install nodemon -g
nodemon app.js
nodemonは、Node.jsアプリケーションを監視し、ファイルに変更が加えられるたびに再起動します。
Supervisorは、プロセスを監視および管理するためのツールです。Supervisorは、自動的に再起動する機能を含む、多くの機能を提供しています。
sudo yum install supervisor
[program:node-app]
command=/usr/local/bin/node app.js
autostart=true
autorestart=true
sudo supervisorctl reread
sudo supervisorctl start node-app
LaunchControlは、macOSおよびLinux用のinitシステムです。LaunchControlは、自動的に再起動する機能を含む、多くの機能を提供しています。
- LaunchControlをインストールします。
sudo brew install launchctl
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTD/plist.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.example.node-app</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/node</string>
<string>app.js</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>AutoRestart</key>
<true/>
</dict>
</plist>
sudo mv node-app.plist /Library/LaunchAgents/
sudo launchctl load /Library/LaunchAgents/node-app.plist
CentOSでNode.jsサーバーを自動的に再起動するには、さまざまな方法があります。上記に示した方法はほんの一例です。自分のニーズに合った方法を選択してください。
node.js centos forever