Страница 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
не работает так ((( ругается ...

Код: Выделить всё

[: ==: unexpected operator

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

Все файлы с флагами есть ... если есть пинги до хостов то все нормально ... если нет до одного хотя бы ... то выдает следующее:

Код: Выделить всё

[: ==: unexpected operator]

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,

Браво, а теперь прочтите что писал ТС.