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
이는 해결 방법일 뿐이며 직접 호출해도 문제가 해결되지는 않습니다.