4b25231c01
- 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
37 lines
1.3 KiB
Bash
Executable File
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
|