#!/bin/bash

# 定义一个函数 ppp_check
function ppp_check()
{
    # 获取所有符合条件的 PPP 配置文件列表，并按版本号排序
    config_list=`ls /etc/sysconfig/network-scripts/ifcfg-ppp* | grep "/etc/sysconfig/network-scripts/ifcfg-ppp[1-9]*[0-9]*$" | sort -Vk 1`
    # 计算符合条件的 PPP 配置文件数量
    config_num=`ls /etc/sysconfig/network-scripts/ifcfg-ppp* | grep "/etc/sysconfig/network-scripts/ifcfg-ppp[1-9]*[0-9]*$" | sort -Vk 1 | wc -l`
    
    # 遍历每一个配置文件
    for config in $config_list
    do 
        # 提取配置文件名中的数字部分
        clo=`echo $config | sed "s/\/etc\/sysconfig\/network-scripts\/ifcfg-ppp//g"`
        # 新的检查状态的方案：查看进程中是否有 pppd call ppp*
        connect_status=`/usr/bin/ps -ef | grep "pppd call ppp${clo}" | grep -v "grep" | wc -l`
        # 检查状态的方案：值大于 0，说明存在包含 global ppp${clo} 的行，即该 PPP 接口是活动的
        status_status=`ip address |grep "global ppp${clo}" | grep -v "grep" | wc -l`
        
        # 如果连接进程不存在或连接状态为 down
        if [[ $connect_status -lt 1 || ${status_status} -lt 1 ]]; then
            # 输出连接状态信息
            echo "status_status:"${status_status} "ppp${clo}"
            # 检查是否有与该配置文件相关的 pppd 进程在运行
            pppd_status=`/usr/bin/ps -ef | grep "pppd call ppp${clo}" | grep -v "grep" | wc -l`
            
            # 如果 pppd 进程不存在
            if [[ $pppd_status -lt 1 ]]; then
                # 启动 PPP 接口
                pppd call ppp${clo} &
				sleep 3
            else
                # 获取 pppd 进程的 PID
                pid=`/usr/bin/ps -ef | grep "pppd call ppp${clo}" | grep -v "grep" | awk '{print $2}'`
                # 杀死 pppd 进程
                /usr/bin/kill -9 $pid
				sleep 3
                # 重新启动 PPP 接口
                #pppd call ppp${clo} &
            fi
        fi
    done
}

# 调用 ppp_check 函数
ppp_check

