在 CentOS 上實現 Node.js 應用的自動重啟,可以使用多種方法。以下介紹幾種常用的方法,包括使用 systemd
、Supervisor
和 pm2
。根據你的需求和環境選擇最適合的方法。
systemd
是現代 Linux 發行版(包括 CentOS 7 及以上版本)的初始化系統和服務管理器,可以方便地管理 Node.js 應用的啟動和自動重啟。
創建 systemd 服務文件
假設你的 Node.js 應用入口文件是 /path/to/your/app.js
,并且應用監聽端口是 3000
。
sudo vi /etc/systemd/system/your-app.service
在文件中添加以下內容:
[Unit]
Description=Node.js Application
After=network.target
[Service]
Type=simple
User=<your_user>
WorkingDirectory=/path/to/your/app
ExecStart=/usr/bin/node /path/to/your/app.js
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
說明:
Description
:服務描述。After
:指定服務啟動順序。User
:運行 Node.js 應用的用戶。WorkingDirectory
:應用的工作目錄。ExecStart
:啟動命令。Restart
和 RestartSec
:配置自動重啟策略。WantedBy
:指定目標運行級別。重新加載 systemd 配置
sudo systemctl daemon-reload
啟動服務
sudo systemctl start your-app
設置開機自啟
sudo systemctl enable your-app
查看服務狀態
sudo systemctl status your-app
停止服務
sudo systemctl stop your-app
Supervisor 是一個流行的進程管理工具,可以監控和控制多個進程。
安裝 Supervisor
sudo yum install epel-release
sudo yum install supervisor
配置 Supervisor
編輯 Supervisor 的配置文件,添加你的 Node.js 應用。
sudo vi /etc/supervisord.conf
在 [program:your-app]
部分添加:
[program:your-app]
command=/usr/bin/node /path/to/your/app.js
autostart=true
autorestart=true
stderr_logfile=/var/log/your-app.err.log
stdout_logfile=/var/log/your-app.out.log
user=<your_user>
environment=NODE_ENV="production",
重新加載 Supervisor 配置
sudo supervisorctl reread
sudo supervisorctl update
啟動應用
sudo supervisorctl start your-app
查看應用狀態
sudo supervisorctl status your-app
PM2 是一個功能強大的 Node.js 進程管理器,支持自動重啟、負載均衡、日志管理等功能。
安裝 PM2
使用 npm
安裝 PM2:
sudo npm install pm2 -g
或者使用 yarn
:
sudo yarn global add pm2
啟動應用并配置自動重啟
pm2 start /path/to/your/app.js --name "your-app"
配置自動重啟:
pm2 startup
PM2 會生成啟動腳本,根據提示執行相應的命令(例如 systemctl
)。
保存當前進程列表
pm2 save
查看應用狀態
pm2 status
停止應用
pm2 stop your-app
重啟應用
pm2 restart your-app
雖然不如前述方法優雅,但也可以使用 cron
定時任務來檢查 Node.js 應用是否運行,并在異常時重啟。
創建檢查腳本
創建一個腳本 /usr/local/bin/check_node_app.sh
:
#!/bin/bash
APP_PATH=/path/to/your/app.js
APP_USER=<your_user>
PID_FILE=/var/run/your-app.pid
if [ -f $PID_FILE ]; then
PID=$(cat $PID_FILE)
if ps -p $PID > /dev/null; then
echo "Node.js app is running with PID $PID."
else
echo "Node.js app is not running. Restarting..."
sudo -u $APP_USER /usr/bin/node $APP_PATH &
echo $! > $PID_FILE
fi
else
echo "PID file not found. Starting Node.js app..."
sudo -u $APP_USER /usr/bin/node $APP_PATH &
echo $! > $PID_FILE
fi
賦予執行權限:
sudo chmod +x /usr/local/bin/check_node_app.sh
編輯 crontab
打開當前用戶的 crontab:
crontab -e
添加以下行,每分鐘檢查一次:
* * * * * /usr/local/bin/check_node_app.sh >> /var/log/check_node_app.log 2>&1
保存并退出。
以上方法各有優缺點:
根據你的具體需求和環境選擇最合適的方法來實現 Node.js 應用的自動重啟。