Portál AbcLinuxu, 24. října 2025 19:51
#!/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ě cronem.
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.