centos

如何在 CentOS 上实现 Node.js 的自动重启

小樊
45
2025-04-30 19:19:28
栏目: 编程语言

在 CentOS 上实现 Node.js 应用的自动重启,可以使用多种方法。以下介绍几种常用的方法,包括使用 systemdSupervisorpm2。根据你的需求和环境选择最适合的方法。

方法一:使用 systemd

systemd 是现代 Linux 发行版(包括 CentOS 7 及以上版本)的初始化系统和服务管理器,可以方便地管理 Node.js 应用的启动和自动重启。

步骤:

  1. 创建 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:启动命令。
    • RestartRestartSec:配置自动重启策略。
    • WantedBy:指定目标运行级别。
  2. 重新加载 systemd 配置

    sudo systemctl daemon-reload
    
  3. 启动服务

    sudo systemctl start your-app
    
  4. 设置开机自启

    sudo systemctl enable your-app
    
  5. 查看服务状态

    sudo systemctl status your-app
    
  6. 停止服务

    sudo systemctl stop your-app
    

方法二:使用 Supervisor

Supervisor 是一个流行的进程管理工具,可以监控和控制多个进程。

步骤:

  1. 安装 Supervisor

    sudo yum install epel-release
    sudo yum install supervisor
    
  2. 配置 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",
    
  3. 重新加载 Supervisor 配置

    sudo supervisorctl reread
    sudo supervisorctl update
    
  4. 启动应用

    sudo supervisorctl start your-app
    
  5. 查看应用状态

    sudo supervisorctl status your-app
    

方法三:使用 PM2

PM2 是一个功能强大的 Node.js 进程管理器,支持自动重启、负载均衡、日志管理等功能。

步骤:

  1. 安装 PM2

    使用 npm 安装 PM2:

    sudo npm install pm2 -g
    

    或者使用 yarn

    sudo yarn global add pm2
    
  2. 启动应用并配置自动重启

    pm2 start /path/to/your/app.js --name "your-app"
    

    配置自动重启:

    pm2 startup
    

    PM2 会生成启动脚本,根据提示执行相应的命令(例如 systemctl)。

  3. 保存当前进程列表

    pm2 save
    
  4. 查看应用状态

    pm2 status
    
  5. 停止应用

    pm2 stop your-app
    
  6. 重启应用

    pm2 restart your-app
    

方法四:使用 Cron 定时检查并重启

虽然不如前述方法优雅,但也可以使用 cron 定时任务来检查 Node.js 应用是否运行,并在异常时重启。

步骤:

  1. 创建检查脚本

    创建一个脚本 /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
    
  2. 编辑 crontab

    打开当前用户的 crontab:

    crontab -e
    

    添加以下行,每分钟检查一次:

    * * * * * /usr/local/bin/check_node_app.sh >> /var/log/check_node_app.log 2>&1
    

    保存并退出。

总结

以上方法各有优缺点:

根据你的具体需求和环境选择最合适的方法来实现 Node.js 应用的自动重启。

0
看了该问题的人还看了