71 lines
2.9 KiB
Markdown
71 lines
2.9 KiB
Markdown
# watchdog.sh 使用说明 / Watchdog
|
||
|
||
`watchdog.sh` 用于监控 bytedesk 应用容器,当容器意外退出时自动拉起,减少生产环境停机时间。
|
||
|
||
## 快速开始
|
||
|
||
```bash
|
||
cd deploy/docker
|
||
|
||
# 启动看门狗(后台守护进程;若容器未运行会先自动拉起)
|
||
./watchdog.sh start
|
||
|
||
# 查看状态(看门狗 + 容器 + 重启统计 + 配置)
|
||
./watchdog.sh status
|
||
|
||
# 重启看门狗
|
||
./watchdog.sh restart
|
||
|
||
# 停止看门狗(注意:不会停止 bytedesk 容器本身)
|
||
./watchdog.sh stop
|
||
```
|
||
|
||
## 工作机制
|
||
|
||
1. 每 `WATCHDOG_CHECK_INTERVAL`(默认 10s)检查一次容器 `bytedesk` 状态;
|
||
2. 容器退出且退出码非 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` 重建;
|
||
3. 容器正常退出(退出码 0,如手工 `docker stop`)不自动拉起,看门狗自身退出;
|
||
4. 突发保护:`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 一致) |
|
||
|
||
示例:
|
||
|
||
```bash
|
||
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: 如何彻底停掉应用和看门狗?**
|
||
|
||
```bash
|
||
./watchdog.sh stop # 先停止看门狗
|
||
./stop.sh stop all # 再停止应用(正常退出,看门狗不会误拉起)
|
||
```
|
||
|
||
**Q: 与 docker restart 策略的关系?**
|
||
|
||
compose-bytedesk.yaml 已配置 `restart: unless-stopped`,Docker 自身会拉起崩溃容器;watchdog 额外提供突发限次保护与状态可视化,适合需要更精细控制的场景,按需启用。
|