Originally Posted by
AkuNin
Вот то, что в свое время собирал под похожую задачу(не забываем править пути под свои).
Итак, раз в 5 минут скрипт пингует заданный адрес и в случае неудачи заносит метку в файл ping2.var. Первый раз 1, затем 2, на 3 раз он уже запускает connector, который выполняет те же манипуляции, что и нажатие кнопок в web интерфейсе disconnect и через задержку connect. В четвертый раз, если пинг снова неудачный, скрипт проверяет "переменную" reboot2.var, в которую метки попадают в случает перезагрузки роутера, и если там занесено 0 перезагружает роутер. Если же 4 раз пинг вернул "положительный ответ", переменная reboot2.var обнуляется и цикл продолжается.
Для чего перезагрузка. У меня belline/corbina и бывают ситуации когда происходит разрыв сессии после которого реконект не происходит, выдавая ошибку о невозможности отрезолвить адрес шлюза (tp.internet.beeline.ru). В данном случае помогает перезагрузка. Возможно помогло бы просто погасить wan порт и поднять вновь, но я не стал заморачиваться и пошел по пути наименьшего сопративления. Благо происходит это достаточно редко.
Огромное спасибо за помощь!
Провел эксперимент:
Создал файл connector: и прописал в него
Code:
#!/bin/sh
case $1 in
connect)
service="wan_connect"
;;
disconnect)
service="wan_disconnect"
;;
*)
echo "Usage: $(basename $0) connect|disconnect"
exit 1
;;
esac
let unit=1*$(nvram get wan_unit)
if [ $unit -lt 0 ]; then
unit=0
fi
nvram set rc_service="$service,$unit"
kill -SIGUSR1 1
sleep 2
Файл Ping.sh
имеет вот такой вид:
Code:
#!/bin/sh
HOSTS="192.168.2.113"
COUNT=4
for myHost in $HOSTS
do
count=$(ping -c $COUNT $myHost | grep 'received' | awk -F',' '{ print $2 }' | awk '{ print $1 }'
)
if [ $count -eq 0 ]; then
# 100% failed
/usr/local/sbin/connector disconnect
sleep 3
/usr/local/sbin/connector connect
fi
done
И запустил его. в итоге в логе в веб-морде имеем следующее:
Code:
19:54:37 15-01-2013 (emerg|kern|wan) wan: disconnected manually (unit 0)
19:54:37 15-01-2013 (debug|kern|kernel) vlan2: del **:**:**:**:**:** mcast address from master interface
19:54:37 15-01-2013 (info|kern|kernel) vlan2: dev_set_allmulti(master, -1)
19:54:37 15-01-2013 (emerg|kern|client) client: deconfig: lease is lost
19:54:37 15-01-2013 (info|daemon|dnsmasq) dnsmasq[242]: read /etc/hosts - 3 addresses
19:54:37 15-01-2013 (info|daemon|dnsmasq-dhcp) dnsmasq-dhcp[242]: read /etc/ethers - 1 addresses
19:54:37 15-01-2013 (info|daemon|dnsmasq) dnsmasq[242]: using nameserver 193.41.63.182#53
19:54:37 15-01-2013 (info|daemon|dnsmasq) dnsmasq[242]: using nameserver 193.41.63.181#53
19:54:42 15-01-2013 (emerg|kern|wan) wan: connected manually (unit 0)
19:54:45 15-01-2013 (notice|user|root) root: ppp0-ip-up: vnstat ppp0 stats enabled
19:54:46 15-01-2013 (info|daemon|dnsmasq) dnsmasq[242]: read /etc/hosts - 3 addresses
19:54:46 15-01-2013 (info|daemon|dnsmasq-dhcp) dnsmasq-dhcp[242]: read /etc/ethers - 1 addresses
19:54:46 15-01-2013 (info|daemon|dnsmasq) dnsmasq[242]: using nameserver 193.41.63.182#53
19:54:46 15-01-2013 (info|daemon|dnsmasq) dnsmasq[242]: using nameserver 193.41.63.181#53
19:54:46 15-01-2013 (emerg|kern|client) client: deconfig: lease is lost
19:54:47 15-01-2013 (info|daemon|dnsmasq) dnsmasq[242]: read /etc/hosts - 3 addresses
19:54:47 15-01-2013 (info|daemon|dnsmasq-dhcp) dnsmasq-dhcp[242]: read /etc/ethers - 1 addresses
19:54:47 15-01-2013 (info|daemon|dnsmasq) dnsmasq[242]: using nameserver 193.41.63.182#53
19:54:47 15-01-2013 (info|daemon|dnsmasq) dnsmasq[242]: using nameserver 193.41.63.181#53
19:54:47 15-01-2013 (notice|user|root) root: ppp0-ip-up: vnstat ppp0 stats enabled
19:54:47 15-01-2013 (emerg|kern|ddns) ddns: IP address has not changed since the last update
19:54:47 15-01-2013 (info|kern|kernel) vlan2: dev_set_allmulti(master, 1)
19:54:47 15-01-2013 (emerg|kern|client) client: bound IP : ***.***.*.*** from ***.***.*.***
19:54:51 15-01-2013 (debug|kern|kernel) vlan2: add **:**:**:**:**:** mcast address to master interface
Сначала не поверил и запустил 2-й раз. В итоге произошло переподключение.
Для чего в ping.sh вписал 192.168.2.113 - для того чтоб проверить реакцию на несуществующий адрес в моей сети.
при замене на ya.ru скрипт отработал без ошибок и без следов в логе. Так что можно его спокойно засовывать в крон и пользовать.
Этот скрипт только передергивает коннект и не ребутит роутер.