收起左侧

飞牛网络断链和lacp循环掉线解决办法

0
回复
169
查看
[ 复制链接 ]

9

主题

18

回帖

0

牛值

江湖小虾

2025-10-11 14:28:20 显示全部楼层 阅读模式

主代码

  1. 创建network_check.sh文件,放置/usr/local/bin/目录下
  2. 需要懂一点shell脚本编写技术,脚本代码如下
#!/bin/bash
# 系统级网络监控脚本 v3.0
# 执行路径: /usr/local/bin/network_check.sh
# 作者: A媓哟 
# 版本: 3.8
# 最后更新: 2025-10-08

# 定义核心参数
TARGETS=(
    "baidu.com"        # 公网DNS测试
    "bing.com"       # 国际连通性测试
    "192.168.126.1"    # 内网网关1
    "192.168.126.2"    # 内网网关2
)
LOG_FILE="/var/log/network_check.log"  # 日志绝对路径
MAX_SIZE=$((15 * 1024 * 1024))         # 15MB阈值(字节单位)
MAX_RETRY=2                            # 最大重试次数
CHECK_INTERVAL=30                      # 检测间隔(秒)

# 日志清理函数
clean_log() {
    local current_size=$(stat -c%s "$LOG_FILE")  # 获取当前文件大小

    if [ "$current_size" -gt "$MAX_SIZE" ]; then
        echo "$(date '+%Y-%m-%d %H:%M:%S') [LOG] 日志文件超过15MB,执行截断操作" >> "$LOG_FILE"
        truncate -s 0 "$LOG_FILE"                 # 安全截断文件
        echo "$(date '+%Y-%m-%d %H:%M:%S') [INFO] 日志文件已清空" >> "$LOG_FILE"
    fi
}

# 延迟启动函数
delayed_start() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') [INFO] 延迟启动中..." >> "$LOG_FILE"
    sleep 30  # 等待系统初始化完成
}

# 网络检测主逻辑
detect_network() {
    local failure_count=0

    for target in "${TARGETS[@]}"; do

	echo "$(date '+%Y-%m-%d %H:%M:%S') [INFO] 进入循环..."
        # 执行带超时的ping检测
        /bin/ping -c 3 -W 2 $target &> /dev/null

	echo "$(date '+%Y-%m-%d %H:%M:%S') [INFO] 完成ping..."

        if [ $? -eq 0 ]; then
            echo "$(date '+%Y-%m-%d %H:%M:%S') [OK] 连通至 $target" >> "$LOG_FILE"
            return 0  # 检测成功立即退出
        else
            echo "$(date '+%Y-%m-%d %H:%M:%S') [FAIL] 无法连接 $target" >> "$LOG_FILE"
            ((failure_count++))
        fi
    done

    # 判断是否达到重启条件
    if [ $failure_count -ge ${#TARGETS[@]} ]; then
        echo "$(date '+%Y-%m-%d %H:%M:%S') [**] 所有目标不可达,重启NetworkManager" >> "$LOG_FILE"
        /bin/systemctl restart NetworkManager
        return 1
    fi

    return 0
}

# 主程序入口
main() {
	clean_log  # 执行日志清理检
	delayed_start  # 执行延迟启动
   	for ((attempt=1; attempt<=MAX_RETRY; attempt++)); do
       		echo "第 $attempt 次检测尝试..."
        if detect_network; then
        	echo "网络检测成功,退出脚本"
            	exit 0
        else
           	 echo "第 $attempt 次检测失败"
            if [ $attempt -lt $MAX_RETRY ]; then
                echo "等待 $CHECK_INTERVAL 秒后重试..."
                sleep $CHECK_INTERVAL  # 等待指定时间后再次检测
            fi
        fi
    done

    echo "已达到最大重试次数 ($MAX_RETRY),脚本终止"
    exit 1

}

# 执行主程序
main

定时运行

  1. 在crontab定时计划下方添加代码 2 * * * * root /usr/local/bin/network_check.sh >/dev/null 2>&1
  2. 保持后就可以摆烂了,最迟2分钟恢复系统服务,想要快点自己删除延迟和循环,一分钟一次即可
收藏
送赞
分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则