12
返回列表 发新帖
收起左侧

开启 OVS 后设备获取不到 IP 的处理方法

82
回复
5061
查看
  [ 复制链接 ]

0

主题

2

回帖

0

牛值

江湖小虾

2026-3-22 23:56:06 显示全部楼层

一样的情况!系统1.1.23,开启OVS无法获取IP,排查了很久差点重装系统!后来插了USB网卡进去把OVS关掉才可以正常获取IP地址,太坑了!

1

主题

5

回帖

0

牛值

江湖小虾

2026-3-23 08:41:07 显示全部楼层

官方也没解决这个问题的方法?单网卡就相当于告别虚拟机了!

0

主题

12

回帖

0

牛值

江湖小虾

2026-3-23 13:40:33 显示全部楼层
wuweijie 发表于 2026-3-18 13:41
今天早上设备突然失联了,折腾半天没解决,最后还是按照你这个方法解决了问题。 ...

有用就行 官方的方法对大部分来说还是麻烦,我这个比较通用

0

主题

12

回帖

0

牛值

江湖小虾

2026-3-23 13:41:24 显示全部楼层
YOUE 发表于 2026-3-19 23:55
今天我这的个问题折腾大半天,最后重装系统,才解决,吓得虚拟机都不敢开了 ...

应该就是OVS这个功能的问题  我关闭了这段时间都没出问题

0

主题

12

回帖

0

牛值

江湖小虾

2026-3-23 13:42:41 显示全部楼层
神经蛙_EVlTq 发表于 2026-3-22 23:53
就差重装系统了,周末两天都在搞这个,Gpt和Gemini都问完了,无数方法试了,差点人崩溃 ...

嘿嘿 我方法最主要是方便,重装肯定能解决

0

主题

12

回帖

0

牛值

江湖小虾

2026-3-23 13:44:27 显示全部楼层
Z291ZGFu 发表于 2026-3-21 20:08
**兄弟,我折腾一整天了看到你的方法两分钟解决,感谢

嘿嘿 不客气  敲代码很多人还是不熟悉

3

主题

4

回帖

0

牛值

系统先锋体验团🛩️

2026-3-24 11:16:03 显示全部楼层

建议过官方切换到 linux bridge,但没回应,linux bridge 更稳定可靠。

5

主题

20

回帖

0

牛值

江湖小虾

2026-3-24 15:30:35 显示全部楼层
FnWen 发表于 2026-3-12 14:07
提供一个修复方法,不用敲命令(自己测试修复成功);手机用数据线连接电脑,然后打开个人热点里的(USB网 ...

头疼了很久,就在最后下定决心重装时,看到你的方法,瞬间解决,顺利登录系统了。非常感谢,大牛。必须得回来顶你一个。版主是理论流,说的小白不懂,你是理论转化为实践派,简单明了的步骤,搞定
帮到就好 我之前也出问题一直在想是不是自己硬件出问题,在看到其他朋友说的插USB网卡可以解决后,想那就只要能另外给他联网通道就行,自己试了一下非常方便 就赶紧分享出来了  详情 回复
2026-3-26 22:12

1

主题

1

回帖

0

牛值

江湖小虾

2026-3-26 01:04:55 显示全部楼层
FnWen 发表于 2026-3-12 14:07
提供一个修复方法,不用敲命令(自己测试修复成功);手机用数据线连接电脑,然后打开个人热点里的(USB网 ...

大哥**。
我的nas突然访问不到了,因为是旧笔记本装的,我还以为是硬盘坏了。
搜到了这个帖子,看到了大哥的评论。
现在全部都正常了。。非常感谢。
我也出问题了,然后看到修复过程出来就觉得麻烦 ,看到其他人说插USB网卡能解就想到用手机了,这方便很多,不需要敲任何键盘 联网了直接手机APP就能操作  详情 回复
2026-3-26 22:06

0

主题

4

回帖

0

牛值

江湖小虾

2026-3-26 12:57:17 显示全部楼层

同样的问题,打开 ovs,不管路由器有没有绑定 mac,在 飞牛上设置了 dhcp 或者固定 ip,过段时间,ipv4 就会丢失,情景必现,现在我只能用无线网卡链接网络,openclaw 装在虚拟机里,总不能不用虚拟机,这个 bug 官方不修一修吗?

0

主题

1

回帖

0

牛值

江湖小虾

2026-3-26 15:10:56 显示全部楼层

论坛找到类似方法,用手机USB 网络分享、手机飞牛内网登录,后续仍有问题折腾一晚上才解决问题;

感谢分享方法!!

0

主题

8

回帖

0

牛值

江湖小虾

2026-3-26 20:22:29 显示全部楼层

PixPin_2026-03-26_20-16-32.jpg

没有IP了,输入账号密码瞬间提示这个,然后又重复到输入账号密码界面,完全登录不进去了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
今天更新1.1.26 官方说修复了这个问题,我之前也是遇到这个问题,截至到现在还未发现故障重现,建议更新到1.1.26  详情 回复
2026-3-26 20:34
不是今天更新了吗 更新了 我还没发现有问题呀  详情 回复
2026-3-26 20:26

0

主题

2

回帖

0

牛值

江湖小虾

2026-3-26 20:26:47 显示全部楼层
你别皱眉 发表于 2026-3-26 20:22
没有IP了,输入账号密码瞬间提示这个,然后又重复到输入账号密码界面,完全登录不进去了
...

不是今天更新了吗  更新了 我还没发现有问题呀

0

主题

2

回帖

0

牛值

江湖小虾

2026-3-26 20:34:27 显示全部楼层
你别皱眉 发表于 2026-3-26 20:22
没有IP了,输入账号密码瞬间提示这个,然后又重复到输入账号密码界面,完全登录不进去了
...

今天更新1.1.26 官方说修复了这个问题,我之前也是遇到这个问题,截至到现在还未发现故障重现,建议更新到1.1.26
没法登录,没法进系统了,更新不了  详情 回复
2026-3-26 21:37

0

主题

8

回帖

0

牛值

江湖小虾

2026-3-26 21:37:06 显示全部楼层
兮然x 发表于 2026-3-26 20:34
今天更新1.1.26 官方说修复了这个问题,我之前也是遇到这个问题,截至到现在还未发现故障重现,建议更新 ...

没法登录,没法进系统了,更新不了
是不是我搞错了,是用手机插飞牛,然后共享网络给飞牛设备  详情 回复
2026-3-26 22:14
可以按照我的方法操作一下,不用重装  详情 回复
2026-3-26 22:01

0

主题

12

回帖

0

牛值

江湖小虾

2026-3-26 22:01:32 显示全部楼层
你别皱眉 发表于 2026-3-26 21:37
没法登录,没法进系统了,更新不了

可以按照我的方法操作一下,不用重装
完全没有IP了,试过了,访问不到飞牛  详情 回复
2026-3-26 22:08

0

主题

12

回帖

0

牛值

江湖小虾

2026-3-26 22:06:15 显示全部楼层
阳光叔叔丶 发表于 2026-3-26 01:04
大哥**。
我的nas突然访问不到了,因为是旧笔记本装的,我还以为是硬盘坏了。
搜到了这个帖子,看到了大 ...

我也出问题了,然后看到修复过程出来就觉得麻烦 ,看到其他人说插USB网卡能解就想到用手机了,这方便很多,不需要敲任何键盘 联网了直接手机APP就能操作

0

主题

8

回帖

0

牛值

江湖小虾

2026-3-26 22:08:22 显示全部楼层
FnWen 发表于 2026-3-26 22:01
可以按照我的方法操作一下,不用重装

完全没有IP了,试过了,访问不到飞牛

0

主题

12

回帖

0

牛值

江湖小虾

2026-3-26 22:12:19 显示全部楼层
沐风而行 发表于 2026-3-24 15:30
头疼了很久,就在最后下定决心重装时,看到你的方法,瞬间解决,顺利登录系统了。非常感谢,大牛。必须得 ...

帮到就好  我之前也出问题一直在想是不是自己硬件出问题,在看到其他朋友说的插USB网卡可以解决后,想那就只要能另外给他联网通道就行,自己试了一下非常方便  就赶紧分享出来了

0

主题

8

回帖

0

牛值

江湖小虾

2026-3-26 22:14:57 显示全部楼层
你别皱眉 发表于 2026-3-26 21:37
没法登录,没法进系统了,更新不了

是不是我搞错了,是用手机插飞牛,然后共享网络给飞牛设备
对的呀 就是手机用数据线插在飞牛主机上,然后收集开启网络共享  详情 回复
2026-3-26 22:16

0

主题

12

回帖

0

牛值

江湖小虾

2026-3-26 22:16:20 显示全部楼层
你别皱眉 发表于 2026-3-26 22:14
是不是我搞错了,是用手机插飞牛,然后共享网络给飞牛设备

对的呀  就是手机用数据线插在飞牛主机上,然后手机开启网络共享,这时候稍微等一下,应该就能进飞牛后台
好的,秒解决了  详情 回复
2026-3-26 22:17

0

主题

8

回帖

0

牛值

江湖小虾

2026-3-26 22:17:43 显示全部楼层
FnWen 发表于 2026-3-26 22:16
对的呀  就是手机用数据线插在飞牛主机上,然后收集开启网络共享

好的,秒解决了

23

主题

92

回帖

0

牛值

初出茅庐

fnOS1.0上线纪念勋章

2026-3-27 14:04:55 显示全部楼层
ip有了还是进不去。

0

主题

2

回帖

0

牛值

江湖小虾

2026-3-28 20:24:06 显示全部楼层

登陆之后黑屏了,过了几秒就又到了登陆命令行,版本1.1.23,今天重启了下路由器就变成了这样

0

主题

1

回帖

0

牛值

江湖小虾

2026-3-29 13:12:08 显示全部楼层
fnos login: [ 523.4780741 1915 0000:00:02.0: [drm] *ERROR* CCONNECTOR:165:HDMI-A-21 Failed to read THDS config: -6
我也是掉ip显示的这个,用网口直连电脑都进不了后台,只能重装

6

主题

38

回帖

0

牛值

初出茅庐

2026-4-4 08:18:33 显示全部楼层

实在想不明白,作为一台NAS,怎么能那么不稳定,刚从群晖过来,感觉又要装回群晖

0

主题

2

回帖

0

牛值

江湖小虾

2026-4-6 18:53:48 显示全部楼层

我看1.2.26说是解决了这个问题,但我升级之后,发现是把我的ovs给关掉了,是这样解决吗?

ovs一关我虚拟机就不能用了 我还得开启,不知道问题到底 解决了没

5

主题

20

回帖

0

牛值

江湖小虾

2026-4-7 11:25:21 显示全部楼层
18663760580 发表于 2026-3-20 15:18
我是飞牛系统突然断 电重启后发现的这个问题,我的解决方案是用另一个网口连接飞牛,关闭网口的OVS,重启一 ...

确实需要使用虚拟机。你这个方法有效吗?怎么没看到人使用效果回复?

5

主题

20

回帖

0

牛值

江湖小虾

2026-4-7 11:26:54 显示全部楼层
荔枝壳 发表于 2026-3-18 23:24
针对OVS网卡的问题,发现开启OVS网卡后,存在运行一段时间后OVS网卡自动丢失IP设置,或者OVS网卡显示有IP但 ...

需要使用虚拟机。你这个可以固定IP来使用吗?
可以了,我一直看论坛里没人回复,我也不敢固定IP,因为1.26之前我只要固定了,飞牛必失联,从飞牛有虚拟机开始,这个问题一直没解决,我每次尝试最后都是重装系统解决的,这次更新了1.26后今天我才又怀着重装系统的  详情 回复
2026-4-14 12:58

0

主题

4

回帖

0

牛值

江湖小虾

2026-4-12 17:35:14 显示全部楼层

使用发现之前V1.2版里设置固定IP时,掩码的变量写错了,导致设置固定IP功能无效。另外还发现如果是用直接修改/etc/network/interfaces文件配置的方式去设置固定IP,会被飞牛OS把IP清了。但使用ip add 命令加的IP可以长久生效。

#!/bin/bash
#飞牛OS有线OVS网卡IP丢失自动修复脚本

#V1.3更新
#1、修改设置固定ip的方法,修改了预设掩码时的错误变量名
#2、DNS服务器默认使用8.8.8.8
#3、改为自动获取脚本文件名,避免手工修改文件名导致MD5校验失效

#V1.2更新
#1、增加检测网络是否通畅的功能,判断能否ping通网关,能否ping通外网
#2、增加OVS网卡有IP,但判断网络不通后,自动删除IP重置的功能
#3、修复任务计划里的bug,把/bin/sh换成/bin/bash --20260326

#V1.1功能:
#1、检测到OVS网卡丢失时自动创建OVS网卡
#2、检测到OVS网卡无IP时自动执行dhclient获取IP,如果指定了IP就设置固定IP到OVS网卡

######全局变量######
version="v1.3"                               #脚本版本号
script_file="$(echo $0 | awk -F '/' '{print $2}')"    #自动获取脚本文件名

phy_nic=""                                   #物理网卡:如果预设了名称,不自动检测物理网卡名
ovs_nic=""                                   #OVS网卡

ip_addr=""                                   #自动检测到的IP
static_ip=""                                 #固定IP:如果留空就默认自动获取IP
netmask="24"                                 #子网掩码:如果设置了固定IP,务必要填写子网掩码
gateway=""                                   #网关IP:如果设置了固定IP,务必要填写网关IP
dns_server="8.8.8.8"                         #DNS服务器:如果设置了固定IP,务必要填写DNS服务器

######**######

#字符颜色程序_黑色
function black(){
    str_input=$1
    echo -e "\\033[30m$str_input\033[0m\c"
}

#字符颜色程序_红色
function red(){
    str_input=$1
    echo -e "\\033[31m$str_input\033[0m\c"
}

#字符颜色程序_绿色
function green(){
    str_input=$1
    echo -e "\\033[32m$str_input\033[0m\c"
}

#字符颜色程序_**
function yellow(){
    str_input=$1
    echo -e "\\033[33m$str_input\033[0m\c"
}

#字符颜色程序_蓝色
function blue(){
    str_input=$1
    echo -e "\\033[34m$str_input\033[0m\c"
}

#字符颜色程序_紫色
function purple(){
    str_input=$1
    echo -e "\\033[35m$str_input\033[0m\c"
}

#字符颜色程序_天蓝色
function skyblue(){
    str_input=$1
    echo -e "\\033[36m$str_input\033[0m\c"
}

#字符颜色程序_白色
function white(){
    str_input=$1
    echo -e "\\033[37m$str_input\033[0m\c"
}


#操作系统名称、版本检测
function system_check(){
    system_name=$(cat /etc/os-release | grep "NAME" | grep -v "_NAME" | awk -F '"' '{print$2}')
    system_version=$(cat /etc/os-release | grep "VERSION_ID" | awk -F '"' '{print$2}' | awk -F "." '{print $1}')
    yellow "操作系统名称: "; green "$system_name\n"
    yellow "操作系统版本: "; green "$system_version\n"
}


#检测指定网卡的IP地址
#用法:check_ip 网卡名
function check_ip() {
    # 获取网卡的IPv4地址(排除127.0.0.1/0.0.0.0)
    ip_addr=$(ip addr show $1 | grep -Eo 'inet [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | grep -v '127.0.0.1' | grep -v '0.0.0.0' | awk '{print $2}')
    if [ ! -z $ip_addr ]; then
        #yellow "网卡"; blue $1; yellow "的IP地址: "; green "$ip_addr\n"
        return 0
    else
        #yellow "网卡"; blue $1; yellow "的IP地址: "; red "未设置\n"
        return 1
    fi
}

#IP设置程序
#用法:configure_ip 网卡名
function configure_ip() {
    if [ -z $1 ];then
        red "没有输入网卡名\n"
        exit 1
    fi

    if [ "$static_ip" == "" ];then     #如果没有预设固定IP,就设置自动获取IP
        #先停止dhclient进程
        pkill -f "dhclient $1" >/dev/null 2>&1 

        #删除指定网卡的IP
        ip addr flush dev $1 >/dev/null 2>&1 
  
        #执行dhclient获取IP
        dhclient $1 >/dev/null 2>&1

        sleep 1
  
        #检查网卡的IP
        check_ip $1
    else
        if [ "$static_ip" != "" -a "$netmask" != "" -a "$gateway" != "" -a "$dns_server" != "" ];then
            #禁用飞牛OS网络托管
            systemctl stop systemd-networkd >> /dev/null 2>&1
            systemctl disable systemd-networkd >> /dev/null 2>&1

            #删除指定网卡的IP
            ip addr flush dev $1 >/dev/null 2>&1 
    
            #设置静态IP
            #nmcli con mod $1 ipv4.addresses $static_ip/$netmask ipv4.method manual >> /dev/null 2>&1

            #设置网关
            #nmcli con mod $1 ipv4.gateway $gateway >> /dev/null 2>&1

            #设置DNS
            #nmcli con mod $1 ipv4.dns "$dns_server" >> /dev/null 2>&1

            #重启网卡生效
            #nmcli con up $1 >> /dev/null 2>&1

            #设置静态IP
            ip addr add $static_ip/$netmask dev $1 >> /dev/null 2>&1
    
            #设置网卡up
            ip link set $1 up >> /dev/null 2>&1

            #设置网关
            ip route replace default via $gateway >> /dev/null 2>&1

            #设置DNS
            if [ "$(cat /etc/resolv.conf | grep "^nameserver $dns_server")" == "" ];then
                echo "nameserver $dns_server" >> /etc/resolv.conf >> /dev/null 2>&1
            fi
            sleep 1

            #检查网卡的IP
            check_ip $1
        else    #如果预设的参数有缺失
            if [ "$netmask" != "" ];then
                red "未设置子网掩码\n"
            fi
            if [ "$gateway" != "" ];then
                red "未设置网关IP\n"
            fi
            if [ "$dns_server" != "" ];then
                red "未设置DNS服务器\n"
            fi

            red "固定IP预设参数不全,改成自动获取IP\n"
            #先停止dhclient进程
            pkill -f "dhclient $1" >/dev/null 2>&1 

            #删除指定网卡的IP
            ip addr flush dev $1 >/dev/null 2>&1 

            #执行dhclient获取IP
            dhclient $1 >/dev/null 2>&1

            sleep 1

            #检查网卡的IP
            check_ip $1
        fi
    fi

}


#获取物理网卡名称
function check_phy_nic(){
    if [ -z $phy_nic ];then   #如果没有预设物理网卡名称,就自动检测
        phy_nic=$(ls /sys/class/net/ | xargs -I {} /bin/bash -c 'if [ -d /sys/class/net/{}/device ]; then echo {}; fi' | grep -E 'enp|ens|eth' | head -1)
    fi

    if [ -z "$phy_nic" ]; then    #如果没有获取到物理网卡名称
        yellow "物理网卡名称: "; red "未检测到物理网卡\n"
        check_phy_nic_name_result="未检测到物理网卡"
    else
        yellow "物理网卡名称: "; green "$phy_nic\n"
        check_phy_nic_name_result="物理网卡名称$phy_nic"

        check_phy_nic_brand_result=$(lspci | grep -i ethernet | awk -F ':' '{print $3}' | awk '{print $1}')
        check_phy_nic_model_result=$(dmesg | grep -i $phy_nic | head -n 1 | awk '{print $3}')
        yellow "物理网卡品牌: "; green "$check_phy_nic_brand_result\n"
        yellow "物理网卡型号: "; green "$check_phy_nic_model_result\n"
    fi
}


#ping测试程序
function ping_test(){
    #对每个ip各ping三次判断存活状态,如ping失败3次,就显示“ping测试失败”
    ping -c1 -W1 $1 >> /dev/null 2>&1  #ping该IP第1次,判断ping的结果, -c1 表示只ping一次,-W1表示超时等待时间是1秒
    if [ $? -eq 0 ];then   #如果第1次ping通了,就return 0,后面就不用再ping了
        return 0
    else  #如果第1次没ping通,就ping第2次
        ping -c1 -W1 $1 >> /dev/null 2>&1  #ping该IP第1次,判断ping的结果, -c 1 表示只ping一次,-i 0.2表示ping的间隔是0.2秒, -W 0.2表示超时等待时间是0.2秒
        if [ $? -eq 0 ];then   #如果第2次ping通了,就return 0,后面就不用再ping了
            return 0
        else  #如果第2次没ping通,就ping第3次
            ping -c1 -W1 $1 >> /dev/null 2>&1  #ping该IP第1次,判断ping的结果, -c 1 表示只ping一次,-i 0.2表示ping的间隔是0.2秒, -W 0.2表示超时等待时间是0.2秒
            if [ $? -eq 0 ];then   #如果第3次ping通了,就return 0,后面就不用再ping了
                return 0
            else    #如果第3次没ping通,就return 1
                return 1
            fi
        fi
    fi
}


#测试网关的连通性
function ping_test_gateway(){
    test_gateway="$(ip route | grep default | awk '{print $3}')"

    #测试网关是否可达
    if [ ! -z $test_gateway ];then
        ping_test $test_gateway
        if [ $? -eq 0 ];then
            yellow "Ping测试网关: "; blue "${test_gateway}"; green " 成功\n";
            ping_test_gateway_resdult="Ping测试网关${test_gateway}成功"
            return 0
        else
            yellow "Ping测试网关: "; blue "${test_gateway}"; red " 失败\n";
            ping_test_gateway_resdult="Ping测试网关${test_gateway}失败"
            return 1
        fi
    else
        yellow "Ping测试网关: "; red "未获取到网关IP\n";
        ping_test_gateway_resdult="Ping测试网关未获取到网关IP"
        return 1
    fi
}


#测试外网 域名的连通性
function ping_test_internet(){
    test_dns="$(nslookup www.baidu.com | grep '^Server:' | awk '{print $2}')"
    test_domain="www.baidu.com"
  
    #测试外网 域名是否可达
    if [ ! -z $test_dns ];then
        ping_test "www.baidu.com"
        if [ $? -eq 0 ];then
            yellow "Ping测试域名: "; blue "${test_domain}"; green " 成功\n";
            ping_test_domain_result="Ping测试域名${test_domain}成功"
            return 0
        else
            yellow "Ping测试域名: "; blue "${test_domain}"; red " 失败\n";
            ping_test_domain_result="Ping测试域名${test_domain}失败"
            return 1
        fi
    else
        yellow "Ping测试域名: "; red "未设置DNS服务器\n";
        ping_test_domain_result="Ping测试域名未设置DNS服务器"
        return 1
    fi
}


#OVS网卡设置程序
#用法:configure_ovs check|setup|restore 物理网卡名
function configure_ovs(){
    if [ -z $1 ];then
        red "没有输入物理网卡名\n"
        exit 1
    fi
  
    if [ "$1" == "check" -o "$1" == "check-csv" ];then
        #检查物理网卡的状态
        if ip ad show "$2" | grep UP &>/dev/null; then
            check_phy_nic_status_result="物理网卡${2}状态是UP"
            yellow "物理网卡状态: "; green "UP\n"
        else
            check_phy_nic_status_result="物理网卡${2}状态是DOWN"
            yellow "物理网卡状态: "; red " DOWN\n"
        fi
  
        #检查物理网卡的IP
        check_ip $2
        if [ $? -eq 0 ]; then
            yellow "物理网卡的IP: "; red "$ip_addr\n"
            check_phy_nic_ip_result="物理网卡的IP是$ip_addr"
        else
            yellow "物理网卡的IP: "; green "未设置\n"
            check_phy_nic_ip_result="物理网卡的IP未设置"
        fi

        #判断物理网卡对应的OVS网卡是否存在(默认命名规则:物理网卡名-ovs)
        ovs_nic="$2-ovs"
        if ip ad show "$ovs_nic" &>/dev/null; then
            yellow "对应的OVS网卡: "; blue "$ovs_nic"; green " 存在\n"

            #检查物理网卡的OVS桥接设置
            if [ "$(ovs-vsctl port-to-br $2)" == "$ovs_nic" ]; then
                check_ovs_nic_result="物理网卡${2}的OVS桥接设置正常"
                yellow "OVS桥接设置: "; green "正常\n"
            else
                check_ovs_nic_result="物理网卡${2}的OVS桥接设置异常"
                yellow "OVS桥接设置: "; red "异常\n"
            fi

            #检测ovs网卡的IP
            check_ip $ovs_nic
            if [ $? -eq 0 ]; then
                yellow "OVS网卡的IP: "; green "$ip_addr\n"
                check_ovs_nic_ip_result="OVS网卡的IP是$ip_addr"

                #测试网关的连通性
                ping_test_gateway

                #测试外网 域名的连通性
                ping_test_internet
            else
                yellow "OVS网卡的IP: "; red "未设置\n"
                check_ovs_nic_ip_result="OVS网卡的IP未设置"
            fi
        else
            yellow "对应的OVS网卡: "; blue "$ovs_nic"; red " 不存在\n"
            check_ovs_nic_result="对应的OVS网卡${ovs_nic}不存在"
        fi
    elif [ "$1" == "setup" -o "$1" == "setup-csv" ];then
        #检查物理网卡的UP状态
        if ip ad show "$2" | grep UP &>/dev/null; then
            check_phy_nic_status_result="物理网卡${2}状态是UP"
            yellow "物理网卡状态: "; green "UP\n"
        else
            #把物理网卡设置为UP状态
            ifup $2

            if ip ad show "$2" | grep UP; then
                check_phy_nic_status_result="物理网卡${2}状态设置为UP成功"
                yellow "物理网卡状态: "; green "UP\n"
            else
                check_phy_nic_status_result="物理网卡${2}状态是DOWN"
                yellow "物理网卡状态: "; red "DOWN\n"
            fi
        fi
  
        #检查物理网卡的IP
        check_ip $2
        if [ $? -eq 0 ];then    #如果物理网卡配了IP,就删除其IP配置
            ip addr flush dev $2
            if [ $? -eq 0 ];then
                yellow "删除物理网卡IP: "; green "成功\n"
                check_phy_nic_ip_result="删除物理网卡IP成功"
            else
                yellow "删除物理网卡IP: "; red "失败\n"
                check_phy_nic_ip_result="删除物理网卡IP${ip_addr}失败"
            fi
        else
            yellow "物理网卡的IP: "; green "未设置\n"
            check_phy_nic_ip_result="物理网卡的IP未设置"
        fi

        #判断物理网卡对应的OVS网卡是否存在(默认命名规则:物理网卡名-ovs)
        ovs_nic="$2-ovs"
        if ip ad show "$ovs_nic" &>/dev/null; then
            yellow "对应的OVS网卡: "; blue "$ovs_nic"; green " 存在\n"

            #检查物理网卡的OVS桥接设置
            if [ "$(ovs-vsctl port-to-br $2)" == "$ovs_nic" ]; then
                check_ovs_nic_result="OVS桥接设置正常"
                yellow "OVS桥接设置: "; green "正常\n"
            else
                #把物理网卡从网桥里移除
                #ovs-vsctl del-port ovs-system $2 >> /dev/null 2>&1
                #ovs-vsctl del-port $ovs_nic $2 >> /dev/null 2>&1
                ovs-vsctl del-port $2 >> /dev/null 2>&1

                #删掉整个网桥
                #ovs-vsctl del-br ovs-system >> /dev/null 2>&1
                ovs-vsctl del-br $ovs_nic >> /dev/null 2>&1

                #创建网桥
                ovs-vsctl add-br $ovs_nic >> /dev/null 2>&1
        
                #把物理网卡加入网桥
                ovs-vsctl add-port $ovs_nic $2 >> /dev/null 2>&1

                #把OVS网卡设置为UP状态
                #ifup $ovs_nic
                ip link set dev $ovs_nic up

                #检测OVS网卡修复结果
                if [ "$(ovs-vsctl port-to-br $2)" == "$ovs_nic" ]; then
                    check_ovs_nic_result="OVS桥接设置修复成功"
                    yellow "OVS桥接设置: "; green "修复成功\n"
                else
                    check_ovs_nic_result="OVS桥接修复失败"
                    yellow "OVS桥接设置: "; red "修复失败\n"
                fi
            fi

            #检测OVS网卡的IP
            check_ip $ovs_nic
            if [ $? -ne 0 ];then    #如果OVS网卡没有设置IP,就进行设置
                configure_ip $ovs_nic
                if [ $? -eq 0 ];then
                    yellow "OVS网卡的IP: "; green "$ip_addr\n"
                    check_ovs_nic_ip_result="OVS网卡的IP是$ip_addr"

                    #测试网关的连通性
                    ping_test_gateway

                    #测试外网 域名的连通性
                    ping_test_internet
                else
                    yellow "OVS网卡的IP: "; red "设置失败\n"
                    check_ovs_nic_ip_result="OVS网卡的IP设置失败"
                fi
            else
                yellow "OVS网卡的IP: "; green "$ip_addr\n"
                check_ovs_nic_ip_result="OVS网卡的IP是$ip_addr"
        
                #测试网关的连通性
                ping_test_gateway
                if [ $? -eq 1 ];then
                    red "检测到网关IP无法ping通,强制重置网卡${ovs_nic}的IP\n"
                    configure_ip $ovs_nic    #如果OVS网卡有IP,但ping不通网关,说明可能是虚假设置,就强制删除IP重新获取
                    if [ $? -eq 0 ];then
                        yellow "OVS网卡重置后的IP: "; green "$ip_addr\n"
                        check_ovs_nic_ip_result="OVS网卡重置后的IP是$ip_addr"

                        #测试网关的连通性
                        ping_test_gateway

                        #测试外网 域名的连通性
                        ping_test_internet
                    else
                        yellow "OVS网卡的IP: "; red "强制重置失败\n"
                        check_ovs_nic_ip_result="OVS网卡的IP强制重置失败"
                    fi
                else    #如果能ping通网关,就测试能否ping通外网 域名
                    #测试外网 域名的连通性
                    ping_test_internet
                fi
            fi
        else
            yellow "对应的OVS网卡: "; blue "$ovs_nic"; red " 不存在\n"
   
            #创建网桥
            ovs-vsctl add-br $ovs_nic >> /dev/null 2>&1
    
            #把物理网卡加入网桥
            ovs-vsctl add-port $ovs_nic $2 >> /dev/null 2>&1

            #把OVS网卡设置为UP状态
            ifup $ovs_nic >> /dev/null 2>&1

            #检测OVS网卡修复结果
            if [ "$(ovs-vsctl port-to-br $2)" == "$ovs_nic" ]; then
                check_ovs_nic_result="OVS桥接设置修复成功"
                yellow "OVS桥接设置: "; green "修复成功\n"
            else
                check_ovs_nic_result="OVS桥接修复失败"
                yellow "OVS桥接设置: "; red "修复失败\n"
            fi

            #检测OVS网卡的IP
            check_ip $ovs_nic
            if [ $? -ne 0 ];then    #如果OVS网卡没有设置IP,就进行设置
                configure_ip $ovs_nic
                if [ $? -eq 0 ];then
                    yellow "OVS网卡的IP: "; green "$ip_addr\n"
                    check_ovs_nic_ip_result="OVS网卡的IP是$ip_addr"

                    #测试网关的连通性
                    ping_test_gateway

                    #测试外网 域名的连通性
                    ping_test_internet
                else
                    yellow "OVS网卡的IP: "; red "设置失败\n"
                    check_ovs_nic_ip_result="OVS网卡的IP设置失败"
                fi
            else
                yellow "OVS网卡的IP: "; green "$ip_addr\n"
                check_ovs_nic_ip_result="OVS网卡的IP是$ip_addr"
        
                #测试网关的连通性
                ping_test_gateway

                #测试外网 域名的连通性
                ping_test_internet
            fi
        fi
    elif [ "$1" == "restore" -o "$1" == "restore-csv" ];then
        #判断物理网卡对应的OVS网卡是否存在(默认命名规则:物理网卡名-ovs)
        ovs_nic="$2-ovs"
        if ip ad show "$ovs_nic" &>/dev/null; then
            yellow "对应的OVS网卡: "; blue "$ovs_nic"; red " 存在\n"
    
            #把物理网卡从网桥里移除
            ovs-vsctl del-port $ovs_nic $2 >> /dev/null 2>&1

            #删除网桥
            ovs-vsctl del-br $ovs_nic >> /dev/null 2>&1

            #检查OVS网卡删除结果
            if ip ad show "$ovs_nic" &>/dev/null; then
                yellow "删除OVS网卡"; blue $ovs_nic; yellow ": "; red "失败\n"
                check_ovs_nic_result="删除OVS网卡${ovs_nic}失败"
            else
                yellow "删除OVS网卡"; blue $ovs_nic; yellow ": "; green "成功\n"
                check_ovs_nic_result="删除OVS网卡${ovs_nic}成功"
            fi
        else
            yellow "OVS网卡: "; blue "$ovs_nic"; green " 不存在\n"
            check_ovs_nic_result="OVS网卡${ovs_nic}不存在"
        fi

        #检查物理网卡的UP状态
        if ip ad show "$2" | grep UP &>/dev/null; then
            check_phy_nic_status_result="物理网卡${2}状态是UP"
            yellow "物理网卡状态: "; green "UP\n"
        else
            #把物理网卡设置为UP状态
            ifup $2 >> /dev/null 2>&1
    
            if ip ad show "$2" | grep UP &>/dev/null; then
                check_phy_nic_status_result="物理网卡${2}状态设置为UP成功"
                yellow "物理网卡状态: "; green "UP\n"
            else
                check_phy_nic_status_result="物理网卡${2}状态是DOWN"
                yellow "物理网卡状态: "; red "DOWN\n"
            fi
        fi
  
        #检查物理网卡的IP
        check_ip $2
        if [ $? -ne 0 ];then    #如果物理网卡没有设置IP,就进行设置
            configure_ip $2
            if [ $? -eq 0 ];then
                yellow "物理网卡的IP: "; green "$ip_addr\n"
                check_ovs_nic_ip_result="物理网卡的IP是$ip_addr"

                #测试网关的连通性
                ping_test_gateway

                #测试外网 域名的连通性
                ping_test_internet
            else
                yellow "物理网卡的IP: "; red "设置失败\n"
                check_ovs_nic_ip_result="物理网卡的IP设置失败"
            fi
        else
            yellow "物理网卡的IP: "; red "$ip_addr\n"
            check_phy_nic_ip_result="物理网卡的IP是$ip_addr"
    
            #测试网关的连通性
            ping_test_gateway

            #测试外网 域名的连通性
            ping_test_internet
        fi
    fi
}


#更新脚本文件程序
function upgrade_script_file(){
    if [ ! -d "/usr/local/scripts/" ];then    #如果不存在/usr/local/scripts/文件夹,就创建该文件夹
        mkdir /usr/local/scripts/
    fi

    if [ "$1" == "check" -o "$1" == "check-csv" ];then
        if [ -f "/usr/local/scripts/fix_ovs_network.sh" ];then    #如果存在fix_ovs_network.sh脚本
            check_upgrade_script_result1="脚本文件fix_ovs_network.sh已部署"
            yellow "脚本部署: "; green "$check_upgrade_script_result1\n"
            if [ -f "$script_file" ];then    #如果存在新上传的脚本
                if [ "$(diff /usr/local/scripts/fix_ovs_network.sh $script_file)" == "" ];then    #如果旧脚本和新脚本完全相同
                    check_upgrade_script_result2="脚本文件无需更新"
                    yellow "脚本更新: "; green "$check_upgrade_script_result2\n"
                else
                    check_upgrade_script_result2="脚本文件需要更新"
                    yellow "脚本更新: "; red "$check_upgrade_script_result2\n"
                fi
            else
                check_upgrade_script_result2="脚本文件无需更新"
                yellow "脚本更新: "; green "$check_upgrade_script_result2\n"
            fi

            #检测fix_ovs_network.sh的权限
            if [ "$(ls -l /usr/local/scripts/fix_ovs_network.sh | grep 'rwx------')" == "" ];then    #如果fix_ovs_network.sh脚本的权限不是700
                check_upgrade_script_result3="脚本权限不是700"
                yellow "脚本权限: "; red "$check_upgrade_script_result3\n"
            else   #如果fix_ovs_network.sh脚本的权限是700
                check_upgrade_script_result3="脚本权限是700"
                yellow "脚本权限: "; green "$check_upgrade_script_result3\n"
            fi
        else
            check_upgrade_script_result1="脚本文件fix_ovs_network.sh未部署"
            check_upgrade_script_result2="脚本文件无需更新"
            check_upgrade_script_result3="脚本权限无法检测"
            yellow "脚本部署: "; red "$check_upgrade_script_result1\n"
            yellow "脚本更新: "; green "$check_upgrade_script_result2\n"
            yellow "脚本权限: "; red "$check_upgrade_script_result3\n"
        fi
        check_upgrade_script_result="$check_upgrade_script_result1;$check_upgrade_script_result2;$check_upgrade_script_result3"
    elif [ "$1" == "setup" -o "$1" == "setup-csv" ];then
        if [ -f "/usr/local/scripts/fix_ovs_network.sh" ];then    #如果存在fix_ovs_network.sh脚本
            check_upgrade_script_result1="脚本文件fix_ovs_network.sh此前已部署"
            yellow "脚本部署: "; green "$check_upgrade_script_result1\n"
            if [ -f "$script_file" ];then    #如果存在新上传的tempcmd-root-fix_ovs_network.sh脚本
                if [ "$(diff /usr/local/scripts/fix_ovs_network.sh $script_file)" == "" ];then    #如果旧脚本和新脚本完全相同
                    check_upgrade_script_result2="脚本文件无需更新"
                    yellow "脚本更新: "; green "$check_upgrade_script_result2\n"
                else
                    cp -f $script_file /usr/local/scripts/fix_ovs_network.sh
                    if [ $? -eq 0 ];then
                        check_upgrade_script_result2="脚本文件更新成功"
                        yellow "脚本更新: "; green "$check_upgrade_script_result2\n"
                    else
                        check_upgrade_script_result2="脚本文件更新失败"
                        yellow "脚本更新: "; red "$check_upgrade_script_result2\n"
                    fi
                fi
            else
                check_upgrade_script_result2="脚本文件无需更新"
                yellow "脚本更新: "; green "$check_upgrade_script_result2\n"
            fi

            #检测fix_ovs_network.sh的权限
            if [ "$(ls -l /usr/local/scripts/fix_ovs_network.sh | grep 'rwx------')" == "" ];then    #如果fix_ovs_network.sh脚本的权限不是700
                chmod 700 /usr/local/scripts/fix_ovs_network.sh
                if [ "$(ls -l /usr/local/scripts/fix_ovs_network.sh | grep 'rwx------')" != "" ];then
                    check_upgrade_script_result3="脚本权限设置为700成功"
                    yellow "脚本权限: "; green "$check_upgrade_script_result3\n"
                else
                    check_upgrade_script_result3="脚本权限设置为700失败"
                    yellow "脚本权限: "; red "$check_upgrade_script_result3\n"
                fi
            else   #如果fix_ovs_network.sh脚本的权限是700
                check_upgrade_script_result3="脚本权限已经是700"
                yellow "脚本权限: "; green "$check_upgrade_script_result3\n"
            fi
        else
            if [ -f "$script_file" ];then    #如果存在新上传的tempcmd-root-fix_ovs_network.sh脚本
                cp -f $script_file /usr/local/scripts/fix_ovs_network.sh
                if [ $? -eq 0 ];then
                    check_upgrade_script_result1="脚本文件fix_ovs_network.sh部署成功"
                    check_upgrade_script_result2="脚本文件无需更新"
                    yellow "脚本部署: "; green "$check_upgrade_script_result1\n"
                    yellow "脚本更新: "; green "$check_upgrade_script_result2\n"
                    if [ "$(ls -l /usr/local/scripts/fix_ovs_network.sh | grep 'rwx------')" == "" ];then    #如果fix_ovs_network.sh脚本的权限不是700
                        chmod 700 /usr/local/scripts/fix_ovs_network.sh
                        if [ "$(ls -l /usr/local/scripts/fix_ovs_network.sh | grep 'rwx------')" != "" ];then
                            check_upgrade_script_result3="脚本权限设置为700成功"
                            yellow "Script Permissions: "; green "$check_upgrade_script_result3\n"
                        else
                            check_upgrade_script_result3="脚本权限设置为700失败"
                            yellow "Script Permissions: "; red "$check_upgrade_script_result3\n"
                        fi
                    else   #如果fix_ovs_network.sh脚本的权限是700
                        check_upgrade_script_result3="脚本权限已经是700"
                        yellow "Script Permissions: "; green "$check_upgrade_script_result3\n"
                    fi
                else
                    check_upgrade_script_result1="脚本文件fix_ovs_network.sh部署失败"
                    check_upgrade_script_result2="脚本文件无需更新"
                    check_upgrade_script_result3="脚本权限无法检测"
                    yellow "脚本部署: "; red "$check_upgrade_script_result1\n"
                    yellow "脚本更新: "; green "$check_upgrade_script_result2\n"
                    yellow "脚本权限: "; red "$check_upgrade_script_result3\n"
                fi
            else
                check_upgrade_script_result1="脚本文件fix_ovs_network.sh未部署"
                check_upgrade_script_result2="脚本文件无需更新"
                check_upgrade_script_result3="脚本权限无法检测"
                yellow "脚本部署: "; red "$check_upgrade_script_result1\n"
                yellow "脚本更新: "; green "$check_upgrade_script_result2\n"
                yellow "脚本权限: "; red "$check_upgrade_script_result3\n"
            fi
        fi
        check_upgrade_script_result="$check_upgrade_script_result1;$check_upgrade_script_result2;$check_upgrade_script_result3"
    elif [ "$1" == "restore" -o "$1" == "restore-csv" ];then
        if [ -f "/usr/local/scripts/fix_ovs_network.sh" ];then    #如果存在fix_ovs_network.sh脚本
            rm -f /usr/local/scripts/fix_ovs_network.sh
            if [ ! -f "/usr/local/scripts/fix_ovs_network.sh" ];then
                check_upgrade_script_result1="脚本文件fix_ovs_network.sh删除成功"
                yellow "脚本部署: "; green "$check_upgrade_script_result1\n"
            else
                check_upgrade_script_result1="脚本文件fix_ovs_network.sh删除失败"
                yellow "脚本部署: "; red "$check_upgrade_script_result1\n"
            fi
        else
            check_upgrade_script_result1="脚本文件fix_ovs_network.sh此前已删除"
            yellow "脚本部署: "; green "$check_upgrade_script_result1\n"
        fi
        check_upgrade_script_result="$check_upgrade_script_result1"
    fi
}


#设置任务计划程序
function config_crontab(){
    if [ "$1" == "check" -o "$1" == "check-csv" ];then
        root_cron_file="/var/spool/cron/crontabs/root"

        if [ -f "$root_cron_file" ];then    #如果存在root的任务文件
            if [ "$(cat $root_cron_file | grep 'fix_ovs_network.sh')" != "" ];then     #如果已经存在'fix_ovs_network.sh任务,判断设置的模式
                #检测是否存在重启后设置任务
                if [ "$(cat $root_cron_file | grep '^@reboot sleep 5 && source /etc/profile && /bin/bash /usr/local/scripts/fix_ovs_network.sh setup-csv')" != "" ];then
                    if [ "$(cat $root_cron_file | grep '^@reboot*.*/fix_ovs_network.sh setup-csv' | wc -l)" -eq 1 ];then
                        check_crontab_result1="重启后设置任务已添加"
                        yellow "重启后设置任务: "; green "$check_crontab_result1\n"
                    else
                        check_crontab_result1="重启后设置任务已添加但存在重复任务"
                        yellow "重启后设置任务: "; red "$check_crontab_result1\n"
                    fi
                else
                    check_crontab_result1="重启后设置任务未添加"
                    yellow "重启后设置任务: "; red "$check_crontab_result1\n"
                fi

                #检测是否存在每分钟设置任务
                if [ "$(cat $root_cron_file | grep '^\* \* \* \* \* /bin/bash /usr/local/scripts/fix_ovs_network.sh setup-csv')" != "" ];then
                    if [ "$(cat $root_cron_file | grep '^\* \* \* \* \* *.*fix_ovs_network.sh setup-csv' | wc -l)" -eq 1 ];then
                        check_crontab_result2="每分钟设置任务已添加"
                        yellow "每分钟设置任务: "; green "$check_crontab_result2\n"
                    else
                        check_crontab_result2="每分钟设置任务已添加但存在重复任务"
                        yellow "每分钟设置任务: "; red "$check_crontab_result2\n"
                    fi
                else
                    check_crontab_result2="每分钟设置任务未添加"
                    yellow "每分钟设置任务: "; red "$check_crontab_result2\n"
                fi
            else
                check_crontab_result1="重启后设置任务未添加"
                check_crontab_result2="每分钟设置任务未添加"
                yellow "重启后设置任务: "; red "$check_crontab_result1\n"
                yellow "每分钟设置任务: "; red "$check_crontab_result2\n"
            fi
        else
                check_crontab_result1="重启后设置任务未添加"
                check_crontab_result2="每分钟设置任务未添加"
                yellow "重启后设置任务: "; red "$check_crontab_result1\n"
                yellow "每分钟设置任务: "; red "$check_crontab_result2\n"
        fi
        check_crontab_result="$check_crontab_result1;$check_crontab_result2"
    elif [ "$1" == "setup" -o "$1" == "setup-csv" ];then
        root_cron_file="/var/spool/cron/crontabs/root"

        if [ -f "$root_cron_file" ];then    #如果存在root的任务文件
            #检测是否存在重启恢复任务
            if [ "$(cat $root_cron_file | grep '^@reboot sleep 5 && source /etc/profile && /bin/bash /usr/local/scripts/fix_ovs_network.sh setup-csv')" != "" ];then
                if [ "$(cat $root_cron_file | grep '^@reboot*.*fix_ovs_network.sh setup-csv' | wc -l)" -eq 1 ];then
                    check_crontab_result1="重启后设置任务此前已添加"
                    yellow "重启后设置任务: "; green "$check_crontab_result1\n"
                else
                    #如果该任务重复配置,就删除全部该任务,然后重新添加一次
                    sed -i "/@reboot*.*fix_ovs_network.sh/d" $root_cron_file
                    echo "@reboot sleep 5 && source /etc/profile && /bin/bash /usr/local/scripts/fix_ovs_network.sh setup-csv" >> $root_cron_file
                    if [ "$(cat $root_cron_file | grep '^@reboot sleep 5 && source /etc/profile && /bin/bash /usr/local/scripts/fix_ovs_network.sh setup-csv' | wc -l)" -eq 1 ];then
                        check_crontab_result1="重启后设置任务此前已添加"
                        yellow "重启后设置任务: "; green "$check_crontab_result1\n"
                    else
                        check_crontab_result1="重启后设置任务此前已添加但存在重复任务"
                        yellow "重启后设置任务: "; red "$check_crontab_result1\n"
                    fi
                fi
            else
                echo "@reboot sleep 5 && source /etc/profile && /bin/bash /usr/local/scripts/fix_ovs_network.sh setup-csv" >> $root_cron_file  #添加重启设置任务
                if [ "$(cat $root_cron_file | grep '^@reboot sleep 5 && source /etc/profile && /bin/bash /usr/local/scripts/fix_ovs_network.sh setup-csv')" != "" ];then
                    check_crontab_result1="重启后设置任务添加成功"
                    yellow "重启后设置任务: "; green "$check_crontab_result1\n"
                else
                    check_crontab_result1="重启后设置任务添加失败"
                    yellow "重启后设置任务: "; red "$check_crontab_result1\n"
                fi
            fi

            #检测是否存在每分钟设置任务
            if [ "$(cat $root_cron_file | grep '^\* \* \* \* \* /bin/bash /usr/local/scripts/fix_ovs_network.sh setup-csv')" != "" ];then
                if [ "$(cat $root_cron_file | grep '^\* \* \* \* \* *.*/fix_ovs_network.sh setup-csv' | wc -l)" -eq 1 ];then
                    check_crontab_result2="每分钟设置任务此前已添加"
                    yellow "每分钟设置任务: "; green "$check_crontab_result2\n"
                else
                    #如果该任务重复配置,就删除全部该任务,然后重新添加一次
                    sed -i "/\* \* \* \* \* *.*fix_ovs_network.sh/d" $root_cron_file
                    echo "* * * * * /bin/bash /usr/local/scripts/fix_ovs_network.sh setup-csv" >> $root_cron_file  #添加每分钟设置任务
                    if [ "$(cat $root_cron_file | grep '^\* \* \* \* \* /bin/bash /usr/local/scripts/fix_ovs_network.sh setup-csv' | wc -l)" -eq 1 ];then
                        check_crontab_result2="重启后设置任务此前已添加"
                        yellow "每分钟设置任务: "; green "$check_crontab_result2\n"
                    else
                        check_crontab_result2="每分钟设置任务此前已添加但存在重复任务"
                        yellow "每分钟设置任务: "; red "$check_crontab_result2\n"
                    fi
                fi
            else
                echo "* * * * * /bin/bash /usr/local/scripts/fix_ovs_network.sh setup-csv" >> $root_cron_file  #添加每分钟设置任务
                if [ "$(cat $root_cron_file | grep '^\* \* \* \* \* /bin/bash /usr/local/scripts/fix_ovs_network.sh setup-csv')" != "" ];then
                    check_crontab_result2="每分钟设置任务添加成功"
                    yellow "每分钟设置任务: "; green "$check_crontab_result2\n"
                else
                    check_crontab_result2="每分钟设置任务添加失败"
                    yellow "每分钟设置任务: "; red "$check_crontab_result2\n"
                fi
            fi
        else
            #添加重启恢复任务
            echo "@reboot sleep 5 && source /etc/profile && /bin/bash /usr/local/scripts/fix_ovs_network.sh setup-csv" >> $root_cron_file  #添加重启设置任务
            if [ "$(cat $root_cron_file | grep '^@reboot sleep 5 && source /etc/profile && /bin/bash /usr/local/scripts/fix_ovs_network.sh setup-csv')" != "" ];then
                check_crontab_result1="重启后设置任务添加成功"
                yellow "重启后设置任务: "; green "$check_crontab_result1\n"
            else
                check_crontab_result1="重启后设置任务添加失败"
                yellow "重启后设置任务: "; red "$check_crontab_result1\n"
            fi

            #添加每分钟设置任务
            echo "* * * * * /bin/bash /usr/local/scripts/fix_ovs_network.sh setup-csv" >> $root_cron_file  #添加每分钟设置任务
            if [ "$(cat $root_cron_file | grep '^\* \* \* \* \* /bin/bash /usr/local/scripts/fix_ovs_network.sh setup-csv')" != "" ];then
                check_crontab_result2="每分钟设置任务添加成功"
                yellow "每分钟设置任务: "; green "$check_crontab_result2\n"
            else
                check_crontab_result2="每分钟设置任务添加失败"
                yellow "每分钟设置任务: "; red "$check_crontab_result2\n"
            fi
        fi
        check_crontab_result="$check_crontab_result1;$check_crontab_result2"

        /sbin/service cron restart >> /dev/null 2>&1    #重启cron服务
    elif [ "$1" == "restore" -o "$1" == "restore-csv" ];then
        root_cron_file="/var/spool/cron/crontabs/root"

        if [ -f "$root_cron_file" ];then    #如果存在root的任务文件
            if [ "$(cat $root_cron_file | grep 'fix_ovs_network.sh')" != "" ];then     #如果已经存在fix_ovs_network.sh任务
                #删除所有fix_ovs_network.sh任务
                sed -i "/fix_ovs_network.sh/d" $root_cron_file
        
                #检查Iptables重启恢复任务是否删除
                if [ "$(cat $root_cron_file | grep '^@reboot*.*fix_ovs_network.sh')" == "" ];then
                    check_crontab_result1="重启后设置任务删除成功"
                    yellow "重启后设置任务: "; green "$check_crontab_result1\n"
                else
                    check_crontab_result1="重启后设置任务删除失败"
                    yellow "重启后设置任务: "; red "$check_crontab_result1\n"
                fi

                #检查每分钟设置任务是否删除
                if [ "$(cat $root_cron_file | grep '^*[[:space:]]*.*fix_ovs_network.sh')" == "" ];then
                    check_crontab_result2="每分钟设置任务删除成功"
                    yellow "每分钟设置任务: "; green "$check_crontab_result2\n"
                else
                    check_crontab_result2="每分钟设置任务删除失败"
                    yellow "每分钟设置任务: "; red "$check_crontab_result2\n"
                fi
            else
                check_crontab_result1="重启后设置任务不存在"
                check_crontab_result2="每分钟设置任务不存在"
                yellow "重启后设置任务: "; green "$check_crontab_result1\n"
                yellow "每分钟设置任务: "; green "$check_crontab_result2\n"
            fi
        else
            check_crontab_result1="重启后设置任务不存在"
            check_crontab_result2="每分钟设置任务不存在"
            yellow "重启后设置任务: "; green "$check_crontab_result1\n"
            yellow "每分钟设置任务: "; green "$check_crontab_result2\n"
        fi
        check_crontab_result="$check_crontab_result1;$check_crontab_result2"

        /sbin/service cron restart >> /dev/null 2>&1    #重启cron服务
    fi
}


#CSV格式结果显示程序
function show_csv_result(){
    check_ovs_result="$ipaddr,$system_name,$system_version,$check_phy_nic_name_result,$check_phy_nic_brand_result,$check_phy_nic_model_result,$check_phy_nic_status_result,$check_phy_nic_ip_result,$check_ovs_nic_result,$check_ovs_nic_ip_result,$ping_test_gateway_result,$ping_test_domain_result,$check_upgrade_script_result,$check_crontab_result"
    echo check_ovs_result="$check_ovs_result"
}


#主程序
function main(){
    if [ "$1" == "check" -o "$1" == "setup" -o "$1" == "restore" ];then
        blue "飞牛OS有线OVS网卡IP丢失自动修复脚本 $version\n"
        echo

        #操作系统名称检测
        system_check

        #获取物理网卡名称
        check_phy_nic

        #ovs网卡设置程序
        configure_ovs $1 $phy_nic

        #更新脚本文件程序
        upgrade_script_file $1

        #设置任务计划程序
        config_crontab $1
    elif [ "$1" == "check-csv" -o "$1" == "setup-csv" -o "$1" == "restore-csv" ];then
        #服务器ip地址获取程序
        get_ip >> /dev/null 2>&1

        #操作系统名称检测
        system_check >> /dev/null 2>&1

        #获取物理网卡名称
        check_phy_nic >> /dev/null 2>&1

        #ovs网卡设置程序
        configure_ovs $1 $phy_nic >> /dev/null 2>&1

        #更新脚本文件程序
        upgrade_script_file $1 >> /dev/null 2>&1

        #设置任务计划程序
        config_crontab $1 >> /dev/null 2>&1

        #CSV格式结果显示程序
        show_csv_result
    fi
}


#帮助程序
function help(){
    green "用法: "; yellow "$0 ( check | check-csv | setup | setup-csv | restore | restore-csv )\n"
    green "举例:\n"
    yellow "$0 check                      ";green "#检查OVS网卡,检查IP设置,检查定时任务\n"
    yellow "$0 check-csv                  ";green "#检查OVS网卡,检查IP设置,检查定时任务,显示CSV格式信息\n"
    yellow "$0 setup                      ";green "#修复OVS网卡,设置IP到OVS网卡,添加定时任务\n"
    yellow "$0 setup-csv                  ";green "#修复OVS网卡,设置IP到OVS网卡,添加定时任务,显示CSV格式信息\n"
    yellow "$0 restore                    ";green "#删除OVS网卡,设置IP到物理网卡,删除定时任务\n"
    yellow "$0 restore-csv                ";green "#删除OVS网卡,设置IP到物理网卡,删除定时任务,显示CSV格式信息\n"
    echo
    exit
}


#必须由root启动
if [ $UID -ne 0 ];then
    red "请使用root用户运行此脚本!\n"
    echo check_ovs_result="请使用root用户运行此脚本"
    exit
fi

#检查输入的参数
if [ $# -ne 1 ];then
    red "脚本必须输入1个参数\n"
    echo
    help
    exit
elif [ "$1" == "check" -o "$1" == "check-csv" -o "$1" == "setup" -o "$1" == "setup-csv" -o "$1" == "restore" -o "$1" == "restore-csv" ];then
    main $1
else
    red "输入的参数错误"
    help
    exit
fi


upload 附件:fix_ovs_network_v1.3.zip

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

1

主题

6

回帖

0

牛值

江湖小虾

2026-4-14 12:58:57 显示全部楼层
沐风而行 发表于 2026-4-7 11:26
需要使用虚拟机。你这个可以固定IP来使用吗?

可以了,我一直看论坛里没人回复,我也不敢固定IP,因为1.26之前我只要固定了,飞牛必失联,从飞牛有虚拟机开始,这个问题一直没解决,我每次尝试最后都是重装系统解决的,这次更新了1.26后今天我才又怀着重装系统的心理又试了下固定IP,好了,重起关机,没出现我以前的所有问题,不失联了,暂时没出现任何问题,好了,心里踏实多了。

0

主题

3

回帖

0

牛值

江湖小虾

FnWen 发表于 2026-3-12 14:07
提供一个修复方法,不用敲命令(自己测试修复成功);手机用数据线连接电脑,然后打开个人热点里的(USB网 ...

感谢,折腾了一晚上

0

主题

3

回帖

0

牛值

江湖小虾

用手机插飞牛,然后共享网络给飞牛设备,进入后看不到原来的有线网卡,只能看到手机网卡

12
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则