commit 9ef722dcfcac9e69c27c502bd0def6663d7c820e Author: JayHoo Date: Sun Mar 1 12:56:55 2026 +0800 feat: 添加wg保活指令 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