ubuntu24设置wireguard开机启动

#!/bin/bash
# 如果是systemd调用,可能不需要某些输出
if [ -n "$SYSTEMD_CALL" ]; then
    # 可以在这里调整日志行为
    echo "Systemd service triggered check at $(date)"
fi

# ===== 可配置变量区域 =====
# 定义要ping的网关地址
GATEWAY="10.7.0.1"
# 定义日志文件位置
LOG_FILE="/home/ubuntu/wireguard/check_wg.log"
# 定义日志最大大小(字节),100MB = 100*1024*1024 = 104857600
LOG_MAX_SIZE=10485760
# 定义保留的日志文件数量
LOG_BACKUP_COUNT=5
# 定义WireGuard配置文件路径
WG_CONFIG="/etc/wireguard/cybetn100.conf"
# 定义脚本路径
STOP_SCRIPT="/home/ubuntu/wireguard/stop.sh"
START_SCRIPT="/home/ubuntu/wireguard/start.sh"

# ===== 函数定义 =====
# 函数:日志轮转
rotate_log() {
    local log_file="$1"
    local max_size="$2"
    local backup_count="$3"
    
    # 检查日志文件是否存在且超过最大大小
    if [ -f "$log_file" ] && [ $(stat -c%s "$log_file") -ge $max_size ]; then
        echo "$(date): Log file reached maximum size, rotating..." >> "$log_file"
        
        # 删除最旧的日志文件
        if [ -f "${log_file}.${backup_count}" ]; then
            rm -f "${log_file}.${backup_count}"
        fi
        
        # 轮转现有的日志文件
        for ((i=backup_count-1; i>=1; i--)); do
            if [ -f "${log_file}.${i}" ]; then
                mv "${log_file}.${i}" "${log_file}.$((i+1))"
            fi
        done
        
        # 移动当前日志文件
        mv "$log_file" "${log_file}.1"
        
        # 创建新的日志文件并添加起始信息
        echo "=== $(date): Log file rotated ===" > "$log_file"
        echo "Previous log file: ${log_file}.1" >> "$log_file"
        echo "=== $(date): Connectivity check started ===" >> "$log_file"
    fi
}

# 函数:记录日志(带时间戳)
log_message() {
    local message="$1"
    echo "$(date): $message" >> "$LOG_FILE"
}

# 函数:更新配置文件中的端口
update_wg_port() {
    return 0
}

# ===== 主程序 =====
# 首先进行日志轮转检查
rotate_log "$LOG_FILE" "$LOG_MAX_SIZE" "$LOG_BACKUP_COUNT"

# 记录检查时间
log_message "Connectivity check started"

# Ping网关,尝试3次,每次超时2秒
if ping -c 3 -W 2 $GATEWAY &> /dev/null; then
    log_message "Successfully pinged $GATEWAY. Connection is healthy."
    exit 0
else
    log_message "FAILED to ping $GATEWAY. Attempting port rotation restart..."
    # 停止WireGuard
    log_message "Stopping WireGuard..."
    sudo "$STOP_SCRIPT" >> "$LOG_FILE" 2>&1
    sleep 2 # 等待2秒确保完全停止

    # 启动WireGuard
    log_message "Starting WireGuard with port auto..."
    sudo "$START_SCRIPT" >> "$LOG_FILE" 2>&1
      
    # 短暂等待后再次检查
    sleep 5
    if ping -c 2 -W 1 $GATEWAY &> /dev/null; then
        log_message "SUCCESS: Connectivity restored using port auto!"
    else
        log_message "WARNING: Restart completed but gateway is still unreachable."
    fi
    exit 1
fi

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注