在宝塔面板部署 Node.js 项目后,很多开发者都会遇到项目意外停止的问题——可能是代码报错、内存溢出,也可能是服务器临时波动,导致服务中断。手动重启不仅繁琐,还会影响用户体验。
本文分享一套轻量级解决方案:利用宝塔自带的计划任务和自定义 Shell 脚本,实现项目进程监控,崩溃后自动重启,支持 .js 和 .mjs 两种入口文件,无需安装 PM2、Supervisor 等额外工具,新手也能快速配置成功。
一、适用场景
- 宝塔面板用户(7.0+ 版本均可)
- 部署 Node.js 项目(Express、Koa、NestJS 等框架通用)
- 希望项目崩溃后自动重启,无需人工干预
- 不想安装额外进程管理工具,追求轻量解决方案
- 支持 CommonJS(.js)和 ES 模块(.mjs)入口文件
二、前置准备
开始配置前,请确认以下 3 点已完成:
- 宝塔面板已安装并成功登录
- 服务器已安装 Node.js(可通过宝塔「软件商店」搜索「Node.js」安装)
- 提前记录两个核心路径(全程使用绝对路径,避免出错):
- 脚本存放路径(建议固定):/www/wwwroot/node_auto_restart.sh
- 项目入口路径(替换为你的实际路径):/www/wwwroot/你的项目目录/入口文件(如 index.js 或 server.mjs)
三、步骤 1:创建监控重启 Shell 脚本
1.1 新建脚本文件
- 登录宝塔面板,点击左侧菜单「文件」
- 导航到目录 /www/wwwroot/,右键点击空白处,选择「新建文件」
- 文件名填写 node_auto_restart.sh,点击「创建」
1.2 编写脚本内容
- 双击打开新建的 node_auto_restart.sh 文件
- 复制以下内容粘贴(务必修改 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 设置脚本权限(关键步骤)
- 在宝塔「文件」中,找到 /www/wwwroot/node_auto_restart.sh 文件
- 右键点击该文件,选择「权限」
- 所有者和用户组均选择「www」(与网站运行权限一致)
- 权限设置为「755」(或勾选「读、写、执行」三个选项)
- 点击「确定」保存权限设置
四、步骤 2:添加宝塔计划任务,实现定时监控
2.1 新建计划任务
- 登录宝塔面板,点击左侧菜单「计划任务」
- 点击页面右上角「添加任务」按钮
- 按以下配置填写(无需修改的保持默认):
- 任务类型:选择「Shell脚本」
- 任务名称:自定义(如「Node项目自动重启监控」)
- 执行周期:选择「每分钟」(检测频率越高,重启越快,推荐默认每分钟)
- 脚本内容:填写脚本的绝对路径 /www/wwwroot/node_auto_restart.sh
- 执行用户:选择 www 或 root 均可
- 点击「添加任务」,任务自动生效
2.2 测试计划任务是否执行成功
- 在计划任务列表中,找到刚刚创建的任务
- 点击任务右侧的「执行」按钮,手动触发一次执行
- 点击任务右侧的「日志」按钮,查看执行结果
- 若日志显示「Successful」,说明计划任务执行成功;若显示错误,检查脚本路径是否填写正确
五、步骤 3:验证项目自动重启功能
3.1 确认项目已启动
- 打开宝塔「终端」,输入以下命令,查看项目进程是否存在:
ps aux | grep 入口文件名 | grep -v grep
(将「入口文件名」替换为你的项目入口文件,如 index.mjs 或 server.js)
- 若输出类似「www 12345 0.0 5.0 ... /www/server/nodejs/v22.20.0/bin/node /www/wwwroot/guaqi/server/index.mjs」的内容,说明项目已成功启动
3.2 测试自动重启功能
- 手动杀死项目进程:在宝塔「终端」输入以下命令(替换为你的入口文件名):
pkill -f 入口文件名
- 等待 1 分钟(计划任务的执行周期)
- 再次执行步骤 3.1 的命令,查看进程是否重新生成;或导航到项目目录,打开 node_monitor.log,若显示「项目进程不存在,已自动重启」,说明自动重启功能生效
3.3 访问项目测试
- 打开浏览器,输入「http://你的服务器IP:项目端口」(如 http://123.45.67.89:3000)
- 若能正常访问项目页面或接口返回,说明服务正常
- 若无法访问:检查宝塔「安全」菜单中,项目端口是否已放行;或云服务器控制台的安全组是否允许该端口入站
六、优化建议(可选)
- 端口隐藏:使用宝塔「网站」→「添加网站」,通过反向代理将域名指向 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 项目将实现「崩溃自动重启」,无需人工干预,稳定性大幅提升!