整套环境:Armbian + PM2 + n1.sh 自愈脚本 + systemd 开机守护

⚠️重要区分:

脚本只负责进程崩溃自动拉起;
账号会话风控、Cookie 过期、QQ 要求扫码,属于业务层面掉线,脚本无法自动修复,需要人工操作

🔍快速判断故障命令

1
2
3
4
5
pm2 list                             # 查看进程是否在线,online≠账号可用
pm2 logs go-cqhttp --lines 100 # 查看go‑cqhttp日志,出现二维码就要扫码
pm2 logs xdd --lines 100 # 查看xdd日志,提示cookie/token失效要重填凭证
bash /root/n1.sh # 运行自愈巡检脚本
tail -f /root/ql/logs/selfheal.log # 查看自愈脚本运行日志

📌场景 1:go‑cqhttp 掉线,需要 QQ 扫码登录

1,停止 pm2 内的 go‑cqhttp

1
2
pm2 stop go-cqhttp
cd /root/go-cqhttp

2,前台临时运行,仅用来扫码登录(登录成功后必须 Ctrl+C 退出,不能长期前台跑)

1
./go-cqhttp

终端输出字符二维码;如果二维码乱码,下载目录下 qrcode.png 到电脑打开扫码
扫码,看到【登录成功】,QQ 机器人可以正常收发消息

3,Ctrl + C 终止前台程序

4,pm2 后台托管启动

1
pm2 start ./go-cqhttp --name go-cqhttp

5,✅必做!保存状态,断电开机才能自动恢复

1
pm2 save

⚠️不要删除目录文件:session.token(登录会话)、device.json(虚拟设备),保留可以减少重复扫码。

📌场景 2:xdd 掉线(无二维码,cookie/token 凭证过期)

1,停止 xdd

1
2
pm2 stop xdd
cd /root/xdd-plus

2,修改 xdd 配置文件,填入最新 cookie / 账号凭证

3,前台测试运行,确认功能正常

1
./xdd

4,Ctrl + C 退出前台程序

5,pm2 托管启动

1
2
pm2 start ./xdd --name xdd
pm2 save

📌场景 3:sillyGirl 掉线

1
2
pm2 restart sillyGirl
pm2 save

✅修复完成后统一校验(每次处理完都跑一遍)

1
2
pm2 list
bash /root/n1.sh

正常输出示例:

1
2
3
4
✅ 腿[go-cqhttp] online
✅ 腿[sillyGirl] online
✅ 腿[xdd] online
3/3

💾更新系统备份(修复正常后建议执行)

1
2
3
4
5
6
7
8
9
crontab -l > /root/cron_backup.txt
pm2 ecosystem > /root/pm2_ecosystem_backup.json
tar -zcvf /root/n1_backup.tar.gz \
/root/n1.sh \
/root/ql-scrub.sh \
/etc/systemd/system/n1-ql-restore.service \
/etc/systemd/system/n1-host-pm2-restore.service \
/root/cron_backup.txt \
/root/pm2_ecosystem_backup.json

🚩开机服务查看命令(重启排错)

1
2
journalctl -u n1-host-pm2-restore.service    # 宿主机pm2开机恢复日志
journalctl -u n1-ql-restore.service # 青龙容器pm2开机恢复日志

⚠️避坑重点(一定要记住)

  1. 禁止长期前台执行 ./go‑cqhttp、./xdd,前台运行脱离 PM2 管理,重启机器直接丢失;前台只用来登录调试。
  2. 每次新增 / 重建 pm2 进程,确认业务正常后,必须执行 pm2 save,否则开机不会自动拉起。
  3. QQ 风控导致 session.token 失效,无解,只能重新扫码;这是腾讯限制,脚本不能绕过。
  4. 升级 node 版本之后,需要修改n1‑host‑pm2‑restore.service内 pm2 的绝对路径。

📦系统重装恢复命令(备份包还原)

1
2
3
4
5
6
7
8
9
10
11
tar -zxvf /root/n1_backup.tar.gz -C /
chmod +x /root/n1.sh
chmod +x /root/ql-scrub.sh
crontab /root/cron_backup.txt
systemctl daemon-reload
systemctl enable n1-ql-restore.service
systemctl enable n1-host-pm2-restore.service
/root/.nvm/versions/node/v22.23.2/bin/pm2 resurrect
pm2 save
mkdir -p /root/ql/logs
bash /root/n1.sh