Files
7z-encrypt-server/watchdog.sh
T
lou 4b25231c01 新增孤儿清理工具 + 看门狗每小时自动清理 + start.sh 无条件补拉看门狗
- clean_orphans.py: 只删数据库无记录的孤儿 (tmp 终态/僵尸任务卷, storage 无记录目录)
  - 目录级判断: files 记录指向的目录整体跳过, 内部文件永不单独删除 (防误删)
  - 路径 resolve 统一, 调用方 cwd 无关
  - 边界: tmp 终态超 1h 删/进行中保留/超 7 天判僵尸; storage 孤儿超 24h 删
- watchdog.sh: 每 30s 保活服务 + 每小时自动跑清理 (失败 30s 后重试)
- start.sh: 看门狗拉起移到无条件位置 (原 main.py 在跑时 exit 短路, 看门狗死亡无人接管)
- tests: 新增 test_clean_orphans 5 项 (含有效目录内 chunk 不删的误删回归断言)
- README: 数据目录补 tmp, 新增运维节, 测试数 13->17
2026-08-11 14:22:28 +08:00

37 lines
1.3 KiB
Bash
Executable File

#!/bin/bash
# 7z-encrypt 服务看门狗: 每 30s 检查服务进程, 挂了自动拉起
# 每小时清理一次孤儿文件 (中断传输残留等)
# 由 start.sh 启动 (容器唤醒后自动恢复); 日志 /tmp/sz-watchdog.log
# 注意: 本脚本不依赖调用方 cwd, 显式 cd 到服务端目录
cd /root/server || exit 1
LOGFILE=/tmp/sz-watchdog.log
log() {
echo "$(date '+%F %T') $1" >> "$LOGFILE"
}
# 防重复: flock 锁文件 (原子, 第二个实例拿不到锁即退出)
# 不用 pgrep: 命令行匹配会误伤调用链 (bash -c 字符串含 watchdog.sh)
exec 9>/tmp/sz-watchdog.lock
if ! flock -n 9; then
exit 0
fi
log "[watchdog] 启动, PID $$"
while true; do
# 每小时清理一次孤儿文件 (启动时 last 文件不存在, 立即清一次)
if [ ! -f /tmp/sz-clean.last ] || [ $(( $(date +%s) - $(cat /tmp/sz-clean.last) )) -ge 3600 ]; then
log "[watchdog] 清理孤儿文件..."
if /root/server/clean_orphans.py --quiet >> /tmp/sz-clean.log 2>&1; then
date +%s > /tmp/sz-clean.last
else
log "[watchdog] 清理失败, 稍后重试"
fi
fi
if ! pgrep -f 'python3 [m]ain\.py' > /dev/null 2>&1; then
log "[watchdog] 服务挂了, 拉起..."
/root/server/start.sh >> "$LOGFILE" 2>&1 || log "[watchdog] 拉起失败"
fi
sleep 30
done