2.9 KiB
2.9 KiB
watchdog.sh 使用说明 / Watchdog
watchdog.sh 用于监控 bytedesk 应用容器,当容器意外退出时自动拉起,减少生产环境停机时间。
快速开始
cd deploy/docker
# 启动看门狗(后台守护进程;若容器未运行会先自动拉起)
./watchdog.sh start
# 查看状态(看门狗 + 容器 + 重启统计 + 配置)
./watchdog.sh status
# 重启看门狗
./watchdog.sh restart
# 停止看门狗(注意:不会停止 bytedesk 容器本身)
./watchdog.sh stop
工作机制
- 每
WATCHDOG_CHECK_INTERVAL(默认 10s)检查一次容器bytedesk状态; - 容器退出且退出码非 0(异常退出)时自动重启:
- 优先
docker start <容器>—— 完整保留容器原有环境变量(含 start.sh 注入的数据源/MQ 配置); - 容器已不存在时,回退
docker compose --env-file .env [--env-file .env.app] -f compose/compose-bytedesk.yaml up -d --no-deps bytedesk重建;
- 优先
- 容器正常退出(退出码 0,如手工
docker stop)不自动拉起,看门狗自身退出; - 突发保护:
WATCHDOG_BURST_WINDOW(默认 300s)内最多重启WATCHDOG_MAX_RESTARTS(默认 5)次,超限停止看门狗并提示人工排查(避免崩溃循环)。
配置项(环境变量覆盖)
| 变量 | 默认值 | 说明 |
|---|---|---|
| WATCHDOG_CHECK_INTERVAL | 10 | 健康检查间隔(秒) |
| WATCHDOG_STARTUP_WAIT | 90 | 重启后等待应用启动的时间(秒) |
| WATCHDOG_MAX_RESTARTS | 5 | 突发窗口内最大重启次数 |
| WATCHDOG_BURST_WINDOW | 300 | 突发窗口时长(秒) |
| WATCHDOG_LOG_FILE | ./watchdog.log | 日志文件 |
| WATCHDOG_CONTAINER_NAME | bytedesk | 监控的容器名 |
| PROJECT_NAME | bytedesk | compose 项目名(与 start.sh 一致) |
示例:
WATCHDOG_CHECK_INTERVAL=30 WATCHDOG_MAX_RESTARTS=3 ./watchdog.sh start
日志与文件
watchdog.log:运行日志(含每次重启记录,用于突发统计)watchdog.pid/watchdog.lock:进程与锁文件(自动管理,勿手工编辑;已加入 .gitignore)
常见问题
Q: 看门狗重启后应用连不上数据库?
优先 docker start 保留原环境,不会出现此问题;仅当容器被删除走 compose 重建分支时,依赖 .env.app(由 start.sh 生成,含数据源/MQ 注入)。若你从未通过 start.sh 启动过应用,请先运行一次 ./start.sh all。
Q: 如何彻底停掉应用和看门狗?
./watchdog.sh stop # 先停止看门狗
./stop.sh stop all # 再停止应用(正常退出,看门狗不会误拉起)
Q: 与 docker restart 策略的关系?
compose-bytedesk.yaml 已配置 restart: unless-stopped,Docker 自身会拉起崩溃容器;watchdog 额外提供突发限次保护与状态可视化,适合需要更精细控制的场景,按需启用。