NetworkManagerによって管理されるADSL(PPPoE)接続があります。
自動接続と無限再試行機能で構成されていますが、残念ながら、NMは完全に安定していません。場合によっては、接続が失敗し、再接続する前に切断して再接続する必要があります。私はこれを自動化するために小さなスクリプトを作成しました。
唯一の問題は、接続を維持したいときです。このスクリプトでは、管理者がこれを実行したかどうかを検出する必要があります。nmcli c adsl down
この場合、再起動を試みないでください。
どうすればいいですか?どちらの場合も、出力を比較しましたが、nmcli c show
役に立つものが見つかりませんでした。私が見つけた唯一の違いは、NMスケジューラが手動pre-down
シャットダウン時にのみ呼び出されることですが、そのような詳細を信頼できるかどうかはわかりません。
答え1
ラッパースクリプトを使用してネットワークの起動/中断を処理し、そこにキープアライブスクリプトを配置できます。
#!/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
ラッパーは、パスまたはアダプタパスが有効になっている場合にのみキープアライブスクリプトを実行します--up
。通過すると、--down
ネットワーク接続が無効になり、keepalive()
機能は実行されません。
nmcli
これは回避策に過ぎず、直接呼び出しても問題は解決しません。