
这些坑不是编的,是实际部署和长期运行中一个个撞出来的。按「现象 → 原因 → 处理」整理,装之前先看一遍能省一整夜。
1. sleep 脚本必死
现象:设了提醒,从来没响过。
原因:那一轮 shell 一结束,进程组就被回收,sleep 跟着死。
# ❌ 这样写必死
sleep 3600 && echo "该喝水了" > /dev/xxx
处理:写成文件,由守护脚本投递。
# ✅ 文件名就是到期时间戳(秒)
echo "(提醒·到点了)四点啦,点外卖" > /root/.dsh/reminders/1792838400.txt
2. 容器时钟是 UTC,提醒落到半夜
现象:设置下午 4 点的提醒,结果凌晨 4 点响。
原因:Android 里的 Linux 容器 date 是 UTC,比北京慢 8 小时。
处理:
# 北京 16:00 = UTC 08:00
date -u -d "today 08:00" +%s
3. root 属主的文件卡死 DSH
现象:网页打不开、机器人不回话,进程卡在「等待鉴权」。
原因:DSH 会 watch 配置目录做热重载。读到 root 属主的文件会 EACCES,整个进程卡住。
处理:
# 放进工作区前先改属主
chown -R <运行用户> <目标目录>
备份文件不要往工作区里塞,放 /data/adb/backup/ 这种独立目录。
4. 分不清「端口在听」和「服务可用」
现象:ss -lntp | grep 3001 看到 docker-proxy 在监听,以为没问题,但从外面连不上。
原因:docker-proxy 只负责转发,不管容器里的服务是否真的起来了。NapCat 的 OneBot WS 只有 QQ 登录成功后才启动。
处理:
# 本机测才准
curl -m 3 -o /dev/null -w "%{http_code}n" http://127.0.0.1:3001
# 400/426 = 服务正常;000 = 容器里没服务
判据:WebUI 通 + WS 不通 = QQ 掉线了。
5. 凭记忆填 WebUI token
现象:WebUI 死活登不进去。
原因:token 记错了,或者配置文件和实际生效的不一致。
处理:token 只有一个正确来源。
docker logs napcat 2>&1 | grep -i token
6. 漏挂载 QQ 数据目录
现象:每次重建容器都要重新扫码。
原因:只挂了 config 目录,没挂 /app/.config/QQ(登录态)。
处理:
-v /root/napcat/config:/app/napcat/config
-v /root/napcat/qq-data:/app/.config/QQ # ← 这条最容易漏
7. 频繁扫码触发风控
现象:扫了几次之后,QQ 要求验证,甚至短期封号。
原因:QQ 对「频繁异地登录」「频繁扫码」极敏感。
处理:
- 能「快速登录」就不要扫码
- 登录态一定持久化(见第 6 条)
- 不要为了测试反复重启容器
- 固定服务器 IP
8. 日志把磁盘写满
现象:某天网站突然 500,一查磁盘满了。
原因:nginx 的 access.log 在被扫描或流量大时,一天能涨几百 MB。实测有台服务器上一个日志文件到了 883MB。
处理:
/path/to/site.log {
daily
rotate 3
size 10M
compress
missingok
notifempty
copytruncate
}
copytruncate 关键——不重启服务就能截断。
9. 不给容器内存上限
现象:一次 OOM,MySQL、Nginx、网站全挂。
原因:NapCat 跑久了内存会涨,吃满宿主机。
处理:
-m 400m --memory-swap 600m
400MB 是实测够用的值(实际占用约 200MB)。
10. 弹窗挡着,点哪儿都没反应
现象:明明点了按钮,界面毫无反应。
原因:小黑盒这类 App 一打开就弹签到/活动,半透明遮罩会把所有点击吃掉。
处理:先枚举控件找关闭键。
python3 /root/win.py # 列出所有可点控件 + 推荐关闭候选
python3 /root/win.py tap 1 # 点第一个候选
看不到文字的 ✕ 在控件树里就是一串坐标,人眼认得出来、程序认不出。
11. 逐字打中文
现象:搜索框里的字变成乱码或错字。
原因:输入法联想会干扰。
处理:中文一律复制粘贴,不要硬打。
12. 改配置不重启不生效
现象:改了插件配置、换了字体,行为没变。
原因:插件有进程内缓存。
处理:改完必须重启 DSH。
顺手记一条:不要在没确认的情况下 am force-stop,那会直接打断桥接,只能靠自愈脚本或手动点「启动 DSHA」拉回。
附:三个”看起来是 bug 其实是设计”的现象
它操作起来很慢,点一下停一下
不是卡,是故意的:读屏 → 判断 → 点击 → 回读验证。提前规划一串动作看似高效,实际会因为界面变化全盘错位。
它有时候一句话都不说
空输出是合法的——插件会跳过空消息,等于这次没开口,不失礼。想安静就一个字别输出,别写”(先不出声)”。
它不知道过了多久
Agent 没有计时器。你觉得”待了十几分钟”,实际常常才一分多钟。所以它会说”待了会儿”而不是”二十分钟”。
排查心法
遇到问题的顺序应该是:
1. 它现在"活着"吗?(进程/端口)
2. 它"能说话"吗?(消息通道)
3. 它"说的话对吗"?(人设/记忆/上下文)
4. 它"花得多吗"?(成本)
别一上来就改人设。90% 的问题在第 1、2 层。
相关阅读
- DSH 大肥鱼手机部署教程:在安卓手机上养一只 AI —— 完整部署流程
- 手机上跑 AI 的三种方案对比:Termux、APK、DSHA 该选哪个 —— 先选对方案
- 养大肥鱼到底烧多少钱?一份真实账单和 8 个省钱技巧 —— 账单长什么样
参考:NapCat、DeepSeek 官网。