From 9ef722dcfcac9e69c27c502bd0def6663d7c820e Mon Sep 17 00:00:00 2001 From: JayHoo Date: Sun, 1 Mar 2026 12:56:55 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0wg=E4=BF=9D=E6=B4=BB?= =?UTF-8?q?=E6=8C=87=E4=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wg-keepalive.sh | 57 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 wg-keepalive.sh diff --git a/wg-keepalive.sh b/wg-keepalive.sh new file mode 100644 index 0000000..60c1828 --- /dev/null +++ b/wg-keepalive.sh @@ -0,0 +1,57 @@ +#!/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