Благодаря gaaronk его участию и модификации его же скрипта был получен (от него) рабочий скрипт, который пингует хост, а при его недоступности выполняется заданный скрипт (и при появлении тоже).
Здесь представлен скрипт, который поднимает VPN, в случае недоступности адреса 1.1.1.1, а при появлении отключиться от VPN.
запускать из post-boot /tmp/ppp/vpn-backup.sh &
vpn-backup.sh
(40 секунд на поднятие интерфейса, 20 на отключение)
Code:
#!/bin/sh
LOG="/usr/bin/logger -t pinger"
live_c=0
dead_c=0
flip_trsh=3
dead_trsh=3 #мёртвый если не пришло 3 ответа
live_trsh=8 #живой, если пришло 8 ответов
time_int=1 #проверять через каждые 1 сек.
host1="1.1.1.1"
online_flag=/tmp/ppp/.online
$LOG "pinger process start"
[ -f $online_flag ] && $LOG "$host1 is online now" || $LOG "$host1 is offline now"
while true; do
if ping -c 1 $host1 > /dev/null 2>&1 ; then
let live_c+=1
[ $live_c -ge $flip_trsh ] && dead_c=0
else
let dead_c+=1
live_c=0
fi
if [ ! -f $online_flag ] && [ $live_c -ge $live_trsh ]; then
touch $online_flag
$LOG "### $host1 is ALIVE! ### count: $live_c ###"
/tmp/ppp/vpn-stop.sh
fi
if [ -f $online_flag ] && [ $dead_c -ge $dead_trsh ]; then
rm $online_flag
$LOG "### $host1 is DEAD! ### count: $dead_c ###"
/tmp/ppp/vpn-start.sh
fi
sleep $time_int
done
exit 0
vpn-start.sh
Code:
#!/bin/sh
pppd file /tmp/ppp/pptp
vpn-stop.sh
Code:
#!/bin/sh
killall pppd
pptp
Code:
pty "/usr/sbin/pptp server_address --nolaunchpppd"
name 'user_name'
password 'password'
remotename PPTP
ipparam pptp
defaultroute
crtscts
lock
noauth
nobsdcomp
nodeflate
persist
maxfail 0
asyncmap 0
mtu 1400
refuse-eap
nomppc
nomppe-stateful
ipcp-accept-local
ipcp-accept-remote
lcp-echo-failure 3
lcp-echo-interval 10
ip-up (описание скрипта)
Code:
#!/bin/sh
log=/tmp/ppp/connect.txt
echo "$0", "$1", "$2", "$3", "$4", "$5", "$6" >> $log
route add default gw $4 dev $1 >> $log
iptables -t nat -A POSTROUTING -o $1 -j SNAT --to-source $4 >> $log
ip-down
Code:
#!/bin/sh
rm /tmp/ppp/connect.txt