Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΡΡΡΡ
ΡΠΊΡΠΈΠΏΡΠΎΠ² ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° ΡΠ΅ΡΠΈ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ bash ΠΈ ping.
ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΡΡΠΈ ΡΠΊΡΠΈΠΏΡΡ Π½Π΅ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΡΡ Π² ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΈ ΡΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΌ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π΄Π»Ρ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π°, ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ nagios:
ΠΠΎ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½Ρ Π΄Π»Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΡ
Π΄ΠΎΠΌΠ°ΡΠ½ΠΈΡ
ΡΠ΅ΡΠ΅ΠΉ, Π³Π΄Π΅ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π°ΠΊΠ»Π°Π΄Π½ΡΠΌ.
Π‘ΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΡΠ΅ΡΠΈ
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ bash ΡΠΊΡΠΈΠΏΡ ΠΏΡΠΎΡΠΊΠ°Π½ΠΈΡΡΠ΅Ρ ΡΠ΅ΡΡ Π½Π° ΠΏΡΠ΅Π΄ΠΌΠ΅Ρ Ρ
ΠΎΡΡΠΎΠ², ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½Π½ΡΡ
ΠΏΠΎ IP-Π°Π΄ΡΠ΅ΡΠ°ΠΌ 10.1.1.1 β 255.
Π‘ΠΊΡΠΈΠΏΡ Π²ΡΠ²Π΅Π΄Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π₯ΠΎΡΡ Ρ Ρ IP: IP-Π°Π΄ΡΠ΅Ρ ΠΏΠΎΠ΄Π½ΡΡ, Π΅ΡΠ»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° ping Π±ΡΠ»Π° ΡΡΠΏΠ΅ΡΠ½ΠΎΠΉ.
ΠΠ΅ ΡΡΠ΅ΡΠ½ΡΠΉΡΠ΅ΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΠΊΡΠΈΠΏΡ Π΄Π»Ρ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° Π²Π°ΡΠΈΡ
Ρ
ΠΎΡΡΠΎΠ².
#!/bin/bash
is_alive_ping()
{
ping -c 1 $1 > /dev/null
[ $? -eq 0 ] && echo Π₯ΠΎΡΡ Ρ IP: $i ΠΏΠΎΠ΄Π½ΡΡ.
}
for i in 10.1.1.{1..255}
do
is_alive_ping $i & disown
done
ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅:
ΠΡΠ²ΠΎΠ΄:
Π₯ΠΎΡΡ with IP: 10.1.1.1 ΠΏΠΎΠ΄Π½ΡΡ.
Π₯ΠΎΡΡ with IP: 10.1.1.4 ΠΏΠΎΠ΄Π½ΡΡ.
Π₯ΠΎΡΡ with IP: 10.1.1.9 ΠΏΠΎΠ΄Π½ΡΡ.
Π£Π²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΏΠΎΡΡΠ΅, ΠΊΠΎΠ³Π΄Π° ΡΠ΅ΡΠ²Π΅Ρ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅ΡΒ
ΠΡΠΈΠΌΠ΅Ρ ΡΠΊΡΠΈΠΏΡΒ β2 ΠΎΡΠΏΡΠ°Π²ΠΈΡ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎΠ΅ ΠΏΠΈΡΡΠΌΠΎ Π½Π° ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ Π°Π΄ΡΠ΅Ρ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎΠΉ ΠΏΠΎΡΡΡ, ΠΊΠΎΠ³Π΄Π° ping Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π΄ΠΎΡΡΠΈΡΡ ΠΌΠ΅ΡΡΠ° Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
Π‘ΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ ΠΌΠΎΠΆΠ΅Ρ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΡΠΎΡ ΡΠΊΡΠΈΠΏΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊΠ° cron.
Π‘Π½Π°ΡΠ°Π»Π° ΡΠΊΡΠΈΠΏΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ping Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ²ΡΠ·ΠΈ Ρ Ρ
ΠΎΡΡΠΎΠΌ ΠΈΠ»ΠΈ IP-Π°Π΄ΡΠ΅ΡΠΎΠΌ, ΡΠΊΠ°Π·Π°Π½Π½ΡΠΌ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°.
Π ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΡΡΠΎ ΠΌΠ΅ΡΡΠΎ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½ΠΎ, Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π°Β ΠΊΠΎΠΌΠ°Π½Π΄Π° mail Π΄Π»Ρ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ° ΠΎΠ± ΡΡΠΎΠΌ ΡΠΎΠ±ΡΡΠΈΠΈ.
#!/bin/bash
for i in $@
do
ping -c 1 $i &> /dev/null
if [ $? -ne 0 ]; then
echo "`date`: ping Π½Π΅ ΠΏΡΠΎΡΠ΅Π», $i Ρ
ΠΎΡΡ Π»Π΅ΠΆΠΈΡ !" | mail -s "$i Ρ
ΠΎΡΡ Π»Π΅ΠΆΠΈΡ!" admin@itsecforu.ru
fi
done
ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅:
./check_hosts.sh google.com yahoo.com 192.168.1.2 mylinuxbox N2100
Π‘ΠΎΠ·Π΄Π°ΡΡ Π»ΠΎΠ³ΠΈ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π°
ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ β ΡΡΠΎ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ Π²Π΅ΡΡΠΈΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°.
ΠΡΠ»ΠΈ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ Π½Π΅ Π½Π°ΡΡΡΠΎΠ΅Π½Π° ΠΏΠΎΡΡΠ°, ΡΠΊΡΠΈΠΏΡ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ°ΠΉΠ» Π»ΠΎΠ³ΠΎΠ².
Π―Π΄ΡΠΎ ΡΠΊΡΠΈΠΏΡΠ° Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΎ Π² Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΡΠΉ ΡΠΈΠΊΠ» while, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°ΡΡΡΠΎΠ΅Π½ Π½Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ping ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Ρ (3600 ΡΠ΅ΠΊΡΠ½Π΄).
ΠΠ·ΠΌΠ΅Π½ΠΈΡΠ΅ ΡΠΊΡΠΈΠΏΡΒ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ Π²Π°ΡΠΈΠΌΠΈ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΡΡΡΠΌΠΈ.
Π£Π΄Π°Π»ΠΈΡΠ΅ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΡΠΉ ΡΠΈΠΊΠ» while, Π΅ΡΠ»ΠΈ Π²Ρ ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΎΡ ΡΠΊΡΠΈΠΏΡ Ρ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊΠΎΠΌ cron.
#!/bin/bash
LOG=/tmp/mylog.log
SECONDS=3600
EMAIL=admin@itsecforu.ru
for i in $@; do
echo "$i-UP!" > $LOG.$i
done
while true; do
for i in $@; do
ping -c 1 $i > /dev/null
if [ $? -ne 0 ]; then
STATUS=$(cat $LOG.$i)
if [ $STATUS != "$i-DOWN!" ]; then
echo "`date`: ping Π½Π΅ΡΠ΄Π°ΡΠ΅Π½, $i Ρ
ΠΎΡΡ Π»Π΅ΠΆΠΈΡ!" |
mail -s "$i Ρ
ΠΎΡΡ Π»Π΅ΠΆΠΈΡ!" $EMAIL
fi
echo "$i-DOWN!" > $LOG.$i
else
STATUS=$(cat $LOG.$i)
if [ $STATUS != "$i-UP!" ]; then
echo "`date`: ΠΏΠΈΠ½Π³ ΠΏΡΠΎΡΠ΅Π», $i Π₯ΠΎΡΡ ΠΏΠΎΠ΄Π½Ρ!" |
mail -s "$i Π₯ΠΎΡΡ ΠΏΠΎΠ΄Π½ΡΡ !" $EMAIL
fi
echo "$i-UP!" > $LOG.$i
fi
done
sleep $SECONDS
done
ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅:
./check-server-status.sh google.com yahoo.com 192.168.1.2 mylinuxbox N2100