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