#!/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