#!/bin/bash # 日志目录 LOG_DIR="/var/log/wg0" # 如果日志目录不存在,则创建它 (需要 root 权限) if [ ! -d "$LOG_DIR" ]; then mkdir -p "$LOG_DIR" 2>/dev/null if [ $? -ne 0 ]; then echo "无法创建日志目录 $LOG_DIR,请检查是否有 root 权限!" exit 1 fi fi # 提示信息 echo "WireGuard 守护脚本已启动,将每 10 秒检测一次 172.18.1.1" echo "运行日志将写入 $LOG_DIR 目录下,按天生成日志文件,并自动清理 3 天前的旧日志。" # 主循环(在前台运行,适合用 Systemd 等服务管理器来守护) while true; do # 获取当前时间和当天的日志文件名 TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S") LOG_FILE="$LOG_DIR/$(date +%Y-%m-%d).log" # -c 1: 发送一个包 # -W 2: 等待响应的最长时间为 2 秒 (Linux 系统下) if ping -c 1 -W 2 172.18.1.1 >/dev/null 2>&1; then echo "[$TIMESTAMP] PING 172.18.1.1 成功" >> "$LOG_FILE" else echo "[$TIMESTAMP] PING 172.18.1.1 失败,准备重启 wg0" >> "$LOG_FILE" # 执行 wg-quick down 并将输出追加到日志 echo "[$TIMESTAMP] 执行: wg-quick down wg0" >> "$LOG_FILE" wg-quick down wg0 >> "$LOG_FILE" 2>&1 if [ $? -eq 0 ]; then echo "[$TIMESTAMP] wg-quick down wg0 执行成功" >> "$LOG_FILE" else echo "[$TIMESTAMP] wg-quick down wg0 执行失败" >> "$LOG_FILE" fi # 执行 wg-quick up 并将输出追加到日志 echo "[$TIMESTAMP] 执行: wg-quick up wg0" >> "$LOG_FILE" wg-quick up wg0 >> "$LOG_FILE" 2>&1 if [ $? -eq 0 ]; then echo "[$TIMESTAMP] wg-quick up wg0 执行成功" >> "$LOG_FILE" else echo "[$TIMESTAMP] wg-quick up wg0 执行失败" >> "$LOG_FILE" fi fi # 每天清理一次 3 天前的日志文件 # 使用 find 命令查找 LOG_DIR 下超过 3 天(mtime +2 表示 > 72 小时)的 .log 文件并删除 find "$LOG_DIR" -name "*.log" -type f -mtime +2 -exec rm -f {} \; # 每 10 秒执行一次 sleep 10 done