Скрипт переключения на резервный канал интернета
Возникла необходимость реализовать автоматическое переключения шлюза Freebsd на резервный канал инета (с тарификацией трафика), когда основной (безлимитный) вдруг умирает. Тем самым — обеспечить стабильную связь последством OpenVPN с центральным офисом. Ну..и уведомить админа о переключении, чтобы знал куда стучаться ssh, если что.
# cat /etc/ch.sh
[sourcecode language=»js»]
#!/bin/sh
# Основной шлюз
GW1=11.0.0.1
# Резервный шлюз
GW2=10.10.10.10
# IP сетевой карты, смотрящей в сторону основного канала интернета
eth0=11.0.0.2
# IP хоста в интернете, который мы будем проверять
dst1=8.8.8.8
inet=0
# делаем машрут на хост в инете через основной канал интернета
#/sbin/route add -host $dst1 $GW1
inet=$(ping -c 1 -S $eth0 $dst1 | grep "64 bytes from" | awk ‘{print $2}’ )
if [ "$inet" != "bytes" ]; then
if [ -f /etc/ppp/reserv.gw ]; then
echo Already switched to secondary channel
else
/sbin/route delete default
/sbin/route add default $GW2
#/sbin/route flush
/sbin/route add -host $dst1 $GW1
/usr/local/etc/rc.d/openvpn restart
touch /etc/ppp/reserv.gw
echo "Primary inet DEAD -> Go to secondary" | mail admin@admin.admin
fi
else
if [ -f /etc/ppp/reserv.gw ]; then
/sbin/route delete default
/sbin/route add default $GW1
/sbin/route del -host $dst1 $GW1
/usr/local/etc/rc.d/openvpn restart
echo "Primary inet restored -> Go to Primary inet" | mail admin@admin.admin
rm /etc/ppp/reserv.gw
fi
fi
[/sourcecode]
ну и ставим задание в cron:
[sourcecode language=»js»]
# Route check and change
* * * * * root /etc/ch.sh
[/sourcecode]
Спасибо за скрипт! Подскажите, пожалуйста, в чес может быть проблема, вручную всё отрабатывает, а при добавлении в крон даже в логе крона ничего не появляется. Спасибо.
«# /etc/crontab — root’s crontab for FreeBSD
#
# $FreeBSD: releng/10.1/etc/crontab 194170 2009-06-14 06:37:19Z brian $
#
SHELL=/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
#
#minute hour mday month wday who command
#
*/5 * * * * root /usr/libexec/atrun
#
# Save some entropy so that /dev/random can re-seed on boot.
*/11 * * * * operator /usr/libexec/save-entropy
#
# Rotate log files every hour, if necessary.
0 * * * * root newsyslog
#
# Perform daily/weekly/monthly maintenance.
1 3 * * * root periodic daily
15 4 * * 6 root periodic weekly
30 5 1 * * root periodic monthly
#
# Adjust the time zone if the CMOS clock keeps local time, as opposed to
# UTC time. See adjkerntz(8) for details.
1,31 0-5 * * * root adjkerntz -a
# Route check and change
*/1 * * * * root /etc/ch.sh
«
@Antonio
Да, но вот посмотрите как можно обойти ограничение крона минутой: http://nixtalk.com/cron1sec
Полезно, жаль в самой системе никак не догадаются сделать какого-нибудь штатного демона, так как мучать крон не очень, да и 1 минута многовато, хочется быстрее