NetworkManager:连接已关闭 - 如何查找原因(管理或故障)?

NetworkManager:连接已关闭 - 如何查找原因(管理或故障)?

我有一个由 NetworkManager 管理的 ADSL (PPPoE) 连接。

它配置了自动连接和无限重试,但不幸的是 NM 并不完全可靠。有时连接失败,我必须先断开连接,然后再建立连接,然后才能再次工作。我制作了一个小脚本来自动执行此操作。

唯一的问题是当我想要保持连接时。在该脚本中,我需要检测管理员是否执行了此操作nmcli c adsl down,在这种情况下,不要尝试重新启动。

我怎么能这么做呢?我比较了两种情况下的输出nmcli c show,但没有发现任何有用的东西。我发现的唯一区别是 NM 调度程序pre-down仅在手动关闭时才会被调用,但我不确定是否可以依赖这样的细节。

答案1

您可以使用一个包装脚本来处理网络上/下并将您的 keepalive 脚本放在那里:

#!/bin/bash

PIDFILE="/tmp/nmclihandler.pid"

#check if pid file exists
if [ -f "$PIDFILE" ]; then
    #check if other process exists
    if [ -d /proc/$(cat "$PIDFILE") ]; then
        echo "killing other instance of script"
        kill $(cat "$PIDFILE")
    #remove pidfile if not
    else
        #echo "removing pidfile"
        rm "$PIDFILE"
    fi
fi
#write pid of current instance to file
echo "$$" > $PIDFILE


keepalive()
{
    #put your current keepalive script here. 
    #It will be run if you pass the --run or -r parameter to the script
    #or if you enable the interface via --up or -u
    echo "keepalive"
}

#command help
if [ "$#" -eq 0 ] || [ "$1" == "-h" ] || [ "$1" == "--help" ]; then
    echo -e "nmcli helper script\n"
    echo -e "Parameter              Desciption\n"
    echo "-h, --help                show this help text"
    echo "-d, --down                disable interface"
    echo "-u, --up              enable interface"
    echo "-r, --run             keepalive connection"
    exit 0
fi

#handle manual network up/down
if [ "$1" == "--down" ] || [ "$1" == "-d" ]; then
    echo "disabling interface"
    nmcli c down adsl
elif [ "$1" == "--up" ] || [ "$1" == "-u" ]; then
    echo "enabling interface"
    nmcli c up adsl
    #run keepalive function after enabling network
elif [ "$1" == "--run" ] || [ "$1" == "-r" ]; then
    #put your keepalive script here
    keepalive
fi

--run如果通过或适配器通过启用,包装器只会运行您的 keepalive 脚本--up。如果--down通过,网络连接将被禁用并且该keepalive()函数将不会运行。

nmcli请注意,这只是一种解决方法,如果直接调用并不能解决问题。

相关内容