宝塔面板关键服务异常自动重启有五种方法:一、用Supervisor守护非系统服务;二、Shell脚本+定时任务检测重启;三、修改systemd unit启用Restart=always;四、PM2管理Node.js应用;五、配置宝塔自身systemd自启。

如果您在宝塔面板中部署了关键服务(如MySQL、Nginx、Node.js应用等),但发现服务意外中断后无法自动恢复,则可能是缺乏有效的进程守护机制。以下是为服务器关键服务配置异常自动重启的多种可行方法:
一、使用Supervisor进程守护管理器
Supervisor是宝塔官方提供的可视化进程守护插件,可监控指定命令启动的服务,在进程退出时自动拉起,适用于PHP、Python、Node.js等非系统级服务。
1、登录宝塔面板,进入「软件商店」,搜索并安装「Supervisor进程守护」插件。
2、安装完成后,点击左侧菜单「Supervisor进程守护」,进入管理界面。
3、点击「添加守护进程」,填写以下核心参数:
• 进程名称:填写唯一标识,例如 mysql_guard;
• 启动命令:粘贴实际服务启动命令,例如 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql;
• 运行目录:填写服务工作路径,例如 /var/lib/mysql;
• 运行用户:选择对应服务用户,如 mysql 或 www;
• 自动启动:勾选「autostart=true」;
• 异常重启:勾选「autorestart=true」并设置 startretries=3 与 startsecs=10。
二、编写Shell脚本+定时任务守护
该方法不依赖第三方工具,通过Linux原生命令检测进程是否存在,适用于mysqld、nginx、redis等系统级服务,兼容所有宝塔版本。
1、使用宝塔「文件管理」进入 /www/server/panel/script/ 目录,新建文件 guard_nginx.sh。
2、编辑该文件,写入以下内容:
#!/bin/bash
pgrep -x nginx &> /dev/null
if [ $? -ne 0 ]; then
/etc/init.d/nginx start
fi
3、保存后右键该文件 → 「权限」→ 设置权限为 0755,所有者设为 root。
4、进入宝塔「计划任务」→ 「添加计划任务」→ 任务类型选「Shell脚本」→ 执行周期设为「每分钟」→ 脚本内容填写:/www/server/panel/script/guard_nginx.sh。
三、启用systemd服务自启与崩溃重启策略
对于已注册为systemd服务的程序(如宝塔自身、MySQL官方包等),可通过修改unit文件启用内置的自动重启能力,无需额外插件或脚本。
1、确认目标服务的unit名称,例如执行 systemctl list-unit-files | grep mysql 查看是否为 mysqld.service。
2、编辑其service文件:sudo systemctl edit mysqld.service。
3、在打开的编辑器中输入以下内容:
[Service]
Restart=always
RestartSec=5
StartLimitInterval=0
4、保存退出后执行 sudo systemctl daemon-reload 与 sudo systemctl restart mysqld 生效。
四、利用PM2守护Node.js应用
针对Node.js项目,PM2提供更精细的进程管理能力,包括内存监控、日志轮转与集群模式,比Supervisor更适合长期运行的JS服务。
1、在SSH中全局安装PM2:npm install pm2 -g。
2、确保PM2命令可被系统识别:执行 which pm2,若无输出,需将路径加入环境变量,例如在 ~/.bashrc 中追加 export PATH=$PATH:/www/server/nodejs/v16.20.2/lib/node_modules/pm2/bin。
3、进入您的Node.js项目目录,执行:pm2 start app.js --name my_node_app。
4、设置开机自启:pm2 startup,再执行 pm2 save 持久化当前进程列表。
五、配置宝塔面板自身服务开机与异常自启
宝塔面板主进程若未正确配置自启,可能导致服务器重启后整个运维界面不可用,进而影响所有守护策略的生效。
1、检查当前状态:bt status,确认输出含 panel (pid XXX) is running。
2、若未启用systemd自启,执行:sudo systemctl enable bt;如提示unit不存在,则手动创建 /etc/systemd/system/bt.service 文件。
3、文件内容需包含以下关键段落:
[Unit]
Description=BaoTa Panel
After=network.target
[Service]
Type=forking
ExecStart=/etc/init.d/bt start
ExecStop=/etc/init.d/bt stop
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
4、执行 sudo systemctl daemon-reload 与 sudo systemctl enable bt 完成配置。










