Страница 1 из 2
Скрипт пинга
Добавлено: 2013-09-05 8:13:16
tray.irk
Уважаемы гуру ... подскажите как сделать скрипт которые бы пинговал хосты определенные и если нет пинга то отправлял бы сообщение?
Я навоял следующий скриптик:
Код: Выделить всё
ping -c1 -q 10.239.1.103 > /dev/null || echo 'NO PING TO DB' | mail -s 'Ping' 7950******@sms.bwc.ru
ping -c1 -q 10.239.1.104 > /dev/null || echo 'NO PING TO TAD' | mail -s 'Ping' 7950******@sms.bwc.ru
Поставил его в крон каждые 5 минут ... но как сами уже догодались при отсутствии пинга ... каждые 5 минут и будут идти сообщения ... как от этого избавиться? и что бы пришло сообщение что пинга нет до хоста ... а следующая пришла бы уже что хост включился?
Re: Скрипт пинга
Добавлено: 2013-09-05 8:34:59
gumeniuc
надо обозначить какой-либо "флаг", который укажет был отправлен email или нет.
Re: Скрипт пинга
Добавлено: 2013-09-05 8:47:12
tray.irk
как это сделать?

Re: Скрипт пинга
Добавлено: 2013-09-05 8:52:50
tray.irk
Была мысля записывать эти самые "флаги" в файл ... и потом считывать его ... но как правильно это реализовать не знаю ((((
вот сей бред:
Код: Выделить всё
#!/bin/sh
vars=`cat /usr/local/etc/scripts/log.txt`
for i in $vars; do eval $i; done
if [ "$db" == "no" ]
then
ping -q -c5 10.239.1.103 > /dev/null
if [ $? -eq 0 ]
then
echo 'PING TO DB -- OK' | mail -s 'Ping' 7950******@sms.bwc.ru
[b]// по идеи тут должена очищаться только определенная переменная, иначе при большом количестве хостов будет глюк[/b]
[b]cat /dev/null > /usr/local/etc/scripts/log.txt[/b]
fi
else
ping -c1 -q 10.239.1.103 > /dev/null || echo 'PING TO DB -- NO' | mail -s 'Ping' 7950******@sms.bwc.ru
db="db=no"
fi
echo $db >> /usr/local/etc/scripts/log.txt
Часть скрипта не работает ... так как плохо знаком с программированием на Shell
Re: Скрипт пинга
Добавлено: 2013-09-05 8:56:35
gumeniuc
не самый оптимизированный пример:
создать файл, например /бла-бла-бла/10.239.1.104.flag, где хранить 0 или 1, в зависимости от того, было отправлено письмо или нет
логика скрипта примерно следующая:
if (ping failed)
then
if ( flag = 0 )
then
send email; set flag =1
fi
else
set flag = 0
fi
Re: Скрипт пинга
Добавлено: 2013-09-05 9:12:04
tray.irk
структуру то я понимаю как должно быть ))) с кодом плохо у меня (((
Re: Скрипт пинга
Добавлено: 2013-09-05 9:45:11
werder31
Код: Выделить всё
/sbin/ping -q -c 5 -t 5 8.8.8.8 || /etc/sms.sh
sms.sh:
Код: Выделить всё
sendEmail -f from_mail@gmail.com -t to_mail@mail.ru -o message-charset=utf-8 -u "Photos..." -m "Тут идет небольшое тело письма..." -s smtp.gmail.com -xu from_mail@gmail.com -xp PASSWORD -l log_file.txt -a photo_1.jpeg photo_2.jpeg
SendEmail - софт небольшой перловый скрипт, ставить отдельно
Re: Скрипт пинга
Добавлено: 2013-09-05 10:29:35
gumeniuc
Попробуйте как-то так
Код: Выделить всё
#!/bin/sh
dir=/usr/home/ssh/
cat $dir/hosts | while read list
do
if [ $(ping -q -c1 $list | grep loss | cut -d " " -f7) == "0.0%" ]
then
echo 0 > $dir/$list.flag
else
if [ $(cat $dir/$list.flag) == "0" ]
then
echo "Sending email" ping errors with $list
echo 1 > $dir/$list.flag
fi
fi
done
Re: Скрипт пинга
Добавлено: 2013-09-05 16:39:24
tray.irk
Какое будет содержание файла hosts?
Re: Скрипт пинга
Добавлено: 2013-09-05 16:44:32
tray.irk
По поводу sendemail ... не совсем понял ... он просто будет отправлять ... а проверок я не вижу ...
Re: Скрипт пинга
Добавлено: 2013-09-05 16:56:41
gumeniuc
tray.irk писал(а):Какое будет содержание файла hosts?
список хостов
192.168.20.23
10.0.0.1
и тд
ну и под каждый хост соответственно свой файл и "флагом"
Re: Скрипт пинга
Добавлено: 2013-09-06 2:59:32
tray.irk
не работает так ((( ругается ...
Re: Скрипт пинга
Добавлено: 2013-09-06 3:05:53
tray.irk
Да и таким макаром файлы с флагами засруться быстро .... так как очистки нет предыдущего значения ...
Re: Скрипт пинга
Добавлено: 2013-09-06 8:05:11
gumeniuc
показывайте hosts файл
tray.irk писал(а):Да и таким макаром файлы с флагами засруться быстро .... так как очистки нет предыдущего значения ...
код внимательно смотрели ? что значит засрутся ?!
Re: Скрипт пинга
Добавлено: 2013-09-06 16:12:51
Гость
Посмотрите ещё
Net::Ping. Для отправки писем можно использовать
smtp-cli.
Re: Скрипт пинга
Добавлено: 2013-09-09 3:00:53
tray.irk
Код: Выделить всё
root@backup:/usr/local/etc/scripts # cat hosts
10.239.1.103
10.239.24.1
10.239.14.1
Код: Выделить всё
root@backup:/usr/local/etc/scripts # cat 1.sh
#!/bin/sh
dir=/usr/local/etc/scripts/
cat $dir/hosts | while read list
do
if [ $(ping -q -c1 $list | grep loss | cut -d " " -f7) == "0.0%" ]
then
echo 0 > $dir/$list.flag
else
if [ $(cat $dir/$list.flag) == "0" ]
then
echo "Sending email" ping errors with $list
echo 1 > $dir/$list.flag
fi
fi
done
Все файлы с флагами есть ... если есть пинги до хостов то все нормально ... если нет до одного хотя бы ... то выдает следующее:
Re: Скрипт пинга
Добавлено: 2013-09-09 11:35:50
gumeniuc
весьма странно, у меня всё работает. одно НО - в файле хостс не должно быть пустых строк.
ну а если тупит именно на отсутствии пинга, добавьте алерт и посмотрите где заваливается.
Re: Скрипт пинга
Добавлено: 2013-09-10 2:24:48
tray.irk
пустых строк нет ... что за алерт?
Re: Скрипт пинга
Добавлено: 2013-09-10 5:25:04
tray.irk
Заработало

скрипт следующий:
Код: Выделить всё
#!/bin/sh
dir=/usr/local/etc/scripts/
cat $dir/hosts | while read list
do
if [ $(ping -q -c1 $list | grep loss | cut -d " " -f7) == "0.0%" ]
then
if [ "$(cat $dir/$list.flag)" == "1" ]
then
echo 'OK PING TO '$list'' | mail -s 'Ping' 7********@sms.bwc.ru
echo 'OK PING TO '$list'' | mail -s 'Ping' 7********@sms.bwc.ru
echo 0 > $dir/$list.flag
else
echo 0 > $dir/$list.flag
fi
else
if [ "$(cat $dir/$list.flag)" == "0" ]
then
echo 'ERROR PING TO '$list'' | mail -s 'Ping' 7********@sms.bwc.ru
echo 'ERROR PING TO '$list'' | mail -s 'Ping' 7********@sms.bwc.ru
echo 1 > $dir/$list.flag
fi
fi
done
и в крон каждую минуту

Re: Скрипт пинга
Добавлено: 2013-10-30 16:12:01
Spook1680
tray.irk писал(а):Заработало

скрипт следующий:
Код: Выделить всё
#!/bin/sh
dir=/usr/local/etc/scripts/
cat $dir/hosts | while read list
do
if [ $(ping -q -c1 $list | grep loss | cut -d " " -f7) == "0.0%" ]
then
if [ "$(cat $dir/$list.flag)" == "1" ]
then
echo 'OK PING TO '$list'' | mail -s 'Ping' 7********@sms.bwc.ru
echo 'OK PING TO '$list'' | mail -s 'Ping' 7********@sms.bwc.ru
echo 0 > $dir/$list.flag
else
echo 0 > $dir/$list.flag
fi
else
if [ "$(cat $dir/$list.flag)" == "0" ]
then
echo 'ERROR PING TO '$list'' | mail -s 'Ping' 7********@sms.bwc.ru
echo 'ERROR PING TO '$list'' | mail -s 'Ping' 7********@sms.bwc.ru
echo 1 > $dir/$list.flag
fi
fi
done
и в крон каждую минуту

А мож подсказать запускаю а в ответ тишина
не приходит на почту
ручками если запустить в ком. строке
Код: Выделить всё
echo OK PING TO | mail -s 'Ping' vasa.pupkin@yandex.ru
то письмо приходит
Re: Скрипт пинга
Добавлено: 2013-10-31 14:56:28
burder
поставить apinger и не мучаться
Re: Скрипт пинга
Добавлено: 2013-10-31 17:21:02
werder31
в скрипте прописывайте полные пути и будет счастье!
Re: Скрипт пинга
Добавлено: 2013-10-31 20:33:24
Spook1680
werder31 писал(а):в скрипте прописывайте полные пути и будет счастье!
Ок., заюзаю. спсибки.
Re: Скрипт пинга
Добавлено: 2013-10-31 22:08:32
lazhu
Какие сложности!
Код: Выделить всё
#!/usr/local/bin/perl
my $ping = `/sbin/ping -c 1 -t timeout i.p.ad.dr | grep '1 packets received' | wc -l`;
if ($ping eq "1\n"){
exit;
}
else {
`echo $ping | /usr/sbin/sendmail -s 'Subject' smbd@smwr.com`;
}
Re: Скрипт пинга
Добавлено: 2013-11-01 9:02:02
gumeniuc
Lazhu,
Браво, а теперь прочтите что писал ТС.