Portál AbcLinuxu, 13. května 2025 22:33
#!/bin/sh
PINGADDR=ver.ej.na.ip
PINGCOUNT=5
SLEEPTIME=60
while [ 1 ]
do
STATE=`ping -c $PINGCOUNT $PINGADDR| awk 'END{print $4}'`
if [ $STATE == 0 ]; then
echo "IP je nedostupna"
else
echo "IP je dostupna"
fi
sleep $SLEEPTIME
done
Bohuzel uz nevim jak zajistit kotrolu stavu v predchozim prubehu skriptu.
Idealni by bylo jeste skript rozsirit o kotrolu napriklad ip adresy pro www.google.com a v pripade, ze budou obe ip adresy nedostupne neprovadet nic, protoze velmi pravdepodobne doslo k vypadku pripojeni na strane naseho skriptu.
Diky za nakopnuti spravnym smerem.
cron
.
#!/bin/bash exec &> /dev/null sms_file='/var/watchdog/gymnacel.sms' email_file='/var/watchdog/gymnacel.email' if ping -nc 3 -i 5 -q -w 60 194.108.202.2 then if [ -e $sms_file ] then rm $sms_file echo 'obnoveno' `date` >> /var/log/gymnacel-watchdog.log fi else if [ ! -e $sms_file ] then echo 'vypadek' `date` >> /var/log/gymnacel-watchdog.log echo 'From: xxx@example.com' > $email_file echo 'Subject: gymnacel nepristupne ' `date` >> $email_file echo '' >> $email_file echo 'From: xxx@example.com > $sms_file echo 'Subject: gymnacel nepristupne ' `date` >> $sms_file echo '' >> $sms_file ping -nc 1 194.108.202.2 >> $email_file || echo '194.108.202.2 selhal' >> $sms_file ping -nc 1 194.108.129.153 >> $email_file || echo '194.108.129.153 selhal' >> $sms_file sendmail -f 'yyy@example.com' 'yyy@example.com' < $email_file sendmail -f 'yyy@example.com' 'yyy-SMS@example.com' < $sms_file fi fi
#!/bin/sh
PINGADDR=ver.ej.na.ip
PINGCOUNT=5
SLEEPTIME=60
while [ 1 ]
do
STATE_IP=`ping -c $PINGCOUNT $PINGADDR| awk 'END{print $4}'`
if [ $STATE_IP == 0 ]; then
if [ $STATE == 0]; then
echo "ip je stale nedostupna. Do nothing."
else
echo "IP je nedostupna. Zapinam tunel."
STATE=0
fi
else
echo "IP je dostupna"
if [ $STATE == 0 ]; then
echo "Vypinam tunel"
STATE=1
fi
fi
sleep $SLEEPTIME
done
Mohlo by to takhle fungovat ?
Diky za reakce.
Bohuzel uz nevim jak zajistit kotrolu stavu v predchozim prubehu skriptu.Pokud to chapu spravne, tak staci pridat jednu promennou a do ni si davat zjisteny stav a v dalsim cyklu si to zase precist.
#!/bin/sh
PINGADDR=ver.ej.na.ip
GOOGLE=64.233.183.99
PINGCOUNT=1
SLEEPTIME=5
while [ 1 ]
do
STATE_GOO=`ping -c $PINGCOUNT $GOOGLE|grep transmitted|awk '{print $4}'`
if [ $STATE_GOO -ne 0 ]; then
echo "Google je dostupny"
STATE_IP=`ping -c $PINGCOUNT $PINGADDR|grep transmitted|awk '{print $4}'`
if [ $STATE_IP -eq 0 ]; then
if [ $STATE -eq 0 ]; then
echo "ip je stale nedostupna. Do nothing."
else
echo "IP je nedostupna. Zapinam tunel."
STATE=0
fi
else
echo "IP je dostupna"
if [ $STATE -eq 0 ]; then
echo "Vypinam tunel"
fi
STATE=1
fi
fi
sleep $SLEEPTIME
done
Budu vdecny za jakekoliv konstruktivni pripominky k uvedenemu skriptu.
sleep
a nebo uděláš jednorázový skriptík, který budeš nejlépe spouštět opakovaně cron
em.
Jak to típnout? Zabít celý skript, případně sleep
, na kterém to vždy na 99,9% visí.
Tip: Jde si pomoci i externím pomocným souborem, kde pomocí jeho obsahu, nebo případně i přímo existencí tohoto souboru můžeme skript ovlivňovat (ukončit, měnit interval apod.).
sleep $SLEEPTIM || exit
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.