宝塔面板 Node.js 项目自动重启教程(计划任务 + Shell 脚本免额外工具)

发布于 更新于
23

在宝塔面板部署 Node.js 项目后,很多开发者都会遇到项目意外停止的问题——可能是代码报错、内存溢出,也可能是服务器临时波动,导致服务中断。手动重启不仅繁琐,还会影响用户体验。

本文分享一套轻量级解决方案:利用宝塔自带的计划任务和自定义 Shell 脚本,实现项目进程监控,崩溃后自动重启,支持 .js 和 .mjs 两种入口文件,无需安装 PM2、Supervisor 等额外工具,新手也能快速配置成功。

一、适用场景

  • 宝塔面板用户(7.0+ 版本均可)
  • 部署 Node.js 项目(Express、Koa、NestJS 等框架通用)
  • 希望项目崩溃后自动重启,无需人工干预
  • 不想安装额外进程管理工具,追求轻量解决方案
  • 支持 CommonJS(.js)和 ES 模块(.mjs)入口文件

二、前置准备

开始配置前,请确认以下 3 点已完成:

  1. 宝塔面板已安装并成功登录
  2. 服务器已安装 Node.js(可通过宝塔「软件商店」搜索「Node.js」安装)
  3. 提前记录两个核心路径(全程使用绝对路径,避免出错):
    • 脚本存放路径(建议固定):/www/wwwroot/node_auto_restart.sh
    • 项目入口路径(替换为你的实际路径):/www/wwwroot/你的项目目录/入口文件(如 index.js 或 server.mjs)

三、步骤 1:创建监控重启 Shell 脚本

1.1 新建脚本文件

  1. 登录宝塔面板,点击左侧菜单「文件」
  2. 导航到目录 /www/wwwroot/,右键点击空白处,选择「新建文件」
  3. 文件名填写 node_auto_restart.sh,点击「创建」

1.2 编写脚本内容

  1. 双击打开新建的 node_auto_restart.sh 文件
  2. 复制以下内容粘贴(务必修改 2 处关键配置):
#!/bin/bash
# ================== 必须修改的配置(根据你的项目调整)==================
APP_ENTRY="/www/wwwroot/guaqi/server/index.mjs"  # 替换为你的项目入口文件绝对路径
NODE_PATH="/www/server/nodejs/v22.20.0/bin/node"  # 替换为你的 Node.js 绝对路径
# ======================================================================

# 固定配置(无需修改)
APP_DIR=$(dirname "$APP_ENTRY")  # 自动获取项目根目录
APP_LOG="$APP_DIR/node_run.log"  # 项目运行日志(记录报错信息)
MONITOR_LOG="$APP_DIR/node_monitor.log"  # 监控日志(记录重启/正常状态)

# 检测项目进程是否存活
if ! pgrep -f "$APP_ENTRY" > /dev/null; then
  # 修复项目目录权限,避免启动失败
  chmod -R 755 "$APP_DIR"
  # 进入项目目录,后台启动项目(日志输出到 node_run.log)
  cd "$APP_DIR" && nohup "$NODE_PATH" "$APP_ENTRY" > "$APP_LOG" 2>&1 &
  # 记录重启时间和状态到监控日志
  echo "[$(date +'%Y-%m-%d %H:%M:%S')] 项目进程不存在,已自动重启" >> "$MONITOR_LOG"
else
  # 记录正常运行状态
  echo "[$(date +'%Y-%m-%d %H:%M:%S')] 项目运行正常" >> "$MONITOR_LOG"
fi

1.3 脚本关键配置说明

  • APP_ENTRY:你的 Node.js 项目入口文件绝对路径,例如 /www/wwwroot/my-project/server.js 或 /www/wwwroot/guaqi/server/index.mjs
  • NODE_PATH:Node.js 安装的绝对路径,获取方法:打开宝塔「终端」,输入命令 which node,复制输出的路径即可
  • 日志说明:node_run.log 记录项目运行报错(如代码错误、依赖缺失),node_monitor.log 记录监控脚本的执行状态(是否重启、是否正常)

1.4 设置脚本权限(关键步骤)

  1. 在宝塔「文件」中,找到 /www/wwwroot/node_auto_restart.sh 文件
  2. 右键点击该文件,选择「权限」
  3. 所有者和用户组均选择「www」(与网站运行权限一致)
  4. 权限设置为「755」(或勾选「读、写、执行」三个选项)
  5. 点击「确定」保存权限设置

四、步骤 2:添加宝塔计划任务,实现定时监控

2.1 新建计划任务

  1. 登录宝塔面板,点击左侧菜单「计划任务」
  2. 点击页面右上角「添加任务」按钮
  3. 按以下配置填写(无需修改的保持默认):
    • 任务类型:选择「Shell脚本」
    • 任务名称:自定义(如「Node项目自动重启监控」)
    • 执行周期:选择「每分钟」(检测频率越高,重启越快,推荐默认每分钟)
    • 脚本内容:填写脚本的绝对路径 /www/wwwroot/node_auto_restart.sh
    • 执行用户:选择 www 或 root 均可
  4. 点击「添加任务」,任务自动生效

2.2 测试计划任务是否执行成功

  1. 在计划任务列表中,找到刚刚创建的任务
  2. 点击任务右侧的「执行」按钮,手动触发一次执行
  3. 点击任务右侧的「日志」按钮,查看执行结果
  4. 若日志显示「Successful」,说明计划任务执行成功;若显示错误,检查脚本路径是否填写正确

五、步骤 3:验证项目自动重启功能

3.1 确认项目已启动

  1. 打开宝塔「终端」,输入以下命令,查看项目进程是否存在: ps aux | grep 入口文件名 | grep -v grep (将「入口文件名」替换为你的项目入口文件,如 index.mjs 或 server.js)
  2. 若输出类似「www 12345 0.0 5.0 ... /www/server/nodejs/v22.20.0/bin/node /www/wwwroot/guaqi/server/index.mjs」的内容,说明项目已成功启动

3.2 测试自动重启功能

  1. 手动杀死项目进程:在宝塔「终端」输入以下命令(替换为你的入口文件名): pkill -f 入口文件名
  2. 等待 1 分钟(计划任务的执行周期)
  3. 再次执行步骤 3.1 的命令,查看进程是否重新生成;或导航到项目目录,打开 node_monitor.log,若显示「项目进程不存在,已自动重启」,说明自动重启功能生效

3.3 访问项目测试

  1. 打开浏览器,输入「http://你的服务器IP:项目端口」(如 http://123.45.67.89:3000)
  2. 若能正常访问项目页面或接口返回,说明服务正常
  3. 若无法访问:检查宝塔「安全」菜单中,项目端口是否已放行;或云服务器控制台的安全组是否允许该端口入站

六、优化建议(可选)

  • 端口隐藏:使用宝塔「网站」→「添加网站」,通过反向代理将域名指向 127.0.0.1:项目端口,无需暴露原始端口,更安全
  • 日志清理:添加宝塔计划任务,每月执行一次日志清理脚本,避免日志文件过大(脚本:echo "" > /www/wwwroot/你的项目目录/node_run.log && echo "" > /www/wwwroot/你的项目目录/node_monitor.log
  • 多项目监控:若需监控多个 Node 项目,复制一份脚本,修改 APP_ENTRY 和脚本文件名,再添加对应的计划任务即可
  • Node 版本切换:若使用多版本 Node,只需更新脚本中的 NODE_PATH 路径,无需修改其他配置

总结

通过「宝塔计划任务+Shell脚本」的方案,无需安装任何额外工具,就能实现 Node.js 项目的自动监控与重启,适合轻量场景使用。

核心要点:确保脚本中的路径填写正确、权限配置无误;若项目频繁崩溃,一定要通过 node_run.log 找到根源并修复,监控脚本仅为临时补救措施。

按照本文步骤配置后,你的 Node.js 项目将实现「崩溃自动重启」,无需人工干预,稳定性大幅提升!

常见问题(FAQ)

0 赞
0 收藏
分享
0 讨论
反馈
0 / 600
0 条评论
热门最新
请添加菜单