LINUX.ORG.RU

доработка bash скрипта(проверка наличия интернет и оповещение в случае отсутствия)


0

0

надыбал скрипт кому интересно. Проверяет заведомо рабочий сайт, если тот не работает то голосом объявляет о отстутствии подключения к интернет. Но требуеться его доработать, как сделать так что бы после того как он 1 раз объявит что сеть упала он больше не надоедал свомими оповещениями, а после того как инет заработал объявлял о наличии сети и опять успокаивался?

#!/bin/bash

ip="ya.ru"
count=3
attempt=3
file="./time"

result=$(ping -c ${count} ${ip} | tail -2 | head -1 | awk '{print $4}')
if [ $result -eq 0 ]; then
if [ -f ${file} ]; then
f=$(cat ${file})
if [ ${f} -eq ${attempt} ]; then
rm ${file}
echo "Соединение с интернет отсутствует" | festival --tts
else
att=$(expr ${f} + 1)
fi
else
att=1
fi

if [ ! -z ${att} ]; then
echo ${att} > ${file}
fi
else
if [ -f ${file} ]; then
rm ${file}
fi
fi

Ответ на: комментарий от edigaryev

А если ya.ru не пингуеться можно например ввести доппроверку скажем google.com....В принципе достаточно только одного google.com ибо если он не пингуеться и не работает в независимости от состояния сети интернета для меня уже нет ))

Timuridze ()

создавай временный файл, если сеть упала. перед тем, как объявить вслух, проверь, существует ли файл. если не существует - объяви и создай. если существует - завершайся.

Если интернет есть - проверь, есть ли файл. если файл есть - удали и объяви, что интренет появился. если файла нет - завершайся.

name_no ★★ ()
Ответ на: комментарий от fluorite

> выход из цикла, который можно организовать, чтобы не играться с созданием и удалением файлов

не вижу в скрипте циклов

name_no ★★ ()
Ответ на: комментарий от Timuridze

гугли advanced bash scripting guide, он и на русском вроде есть

fluorite ★★★★★ ()
Ответ на: комментарий от fluorite

> потому что ИМХО лучше использовать цикл в памяти, чем создавать/удалять файл на диске?

ну, там в цикле break будет всё равно ни к чему. Цикл-то бесконечный.

name_no ★★ ()
Ответ на: комментарий от fluorite

Почему? Я думал что лучше в крон повесть с интервалом раз в 3 минуты например чтоб он запускался....Я так понял вы предлагаете чтоб он постоянно висел в оперативке?

Timuridze ()
Ответ на: комментарий от name_no

Ну у меня в мозгу такая схема возникла

#!/bin/bash
while true; do
result=$(ping -c 3 ya.ru | tail -2 | head -1 | awk '{print $4}')
if [ $result -eq 0 ]; then
echo "Нету интернету"
break
fi
sleep 180
done

exit 0

fluorite ★★★★★ ()
Ответ на: комментарий от fluorite

виноват, не дочитал техзадание - про объявление о появлении сети вновь, неправ был, каюсь :)

fluorite ★★★★★ ()
Ответ на: комментарий от name_no

Вот как раз по вашему способу и пытаюсь. Вот проверка

создавай временный файл, если сеть упала. перед тем, как объявить вслух, проверь, существует ли файл. если не существует - объяви и создай. если существует - завершайся.

Правильно сделал?

if [ ${f} -eq ${attempt} ]; then 
		rm ${file}
		
			if [ -f ${file1} ]; then 
			echo "Соединение с интернет отсутствует" | festival --tts 
			touch $file1
			else 
			fi
		else 

Вот эта часть не совсем понятно

if [ ! -z ${att} ]; then   # Вот что это за условие?
echo ${att} > ${file}      #Ну тут вроде все ясно, записать в счетчик  кол-вло попыток пинга 

fi 
else 

if [ -f ${file} ]; then    #Если инет появился то удаляем файл с счетчиком проверок
rm ${file} 

Timuridze ()
Ответ на: комментарий от Timuridze

Вот концовка так? К сожалению проверить сам пока не могу?


if [ ! -z ${att} ]; then 
echo ${att} > ${file} 
fi 
else 
if [ -f ${file} ]; then 

		if [ -f ${file1} ]; then 
                          fi
            else
			echo "Интернет появился" | festival --tts 
			rm ${file1}
			 
			

rm ${file} 
fi 
fi

Timuridze ()

Йа бы добавил несколько хостов и даже чистые айпишнеги.

ip1981 ☆☆ ()
Ответ на: комментарий от Timuridze

[code]if [ -f ${file1} ]; then echo «Соединение с интернет отсутствует» | festival --tts touch $file1 [/code]

нужна проверка на отсутствие файла, а у тебя тут проверка на существование. То же самое в «концовке».

if [ ! -z ${att} ]; then # Вот что это за условие?

я сам не понял

name_no ★★ ()
Ответ на: комментарий от Timuridze

Когда еще один пьяный фин на тракторе переедет оптоволоконную трассу, оставив нас только с .ru сегментом, или админы твоего провайдера доиграются с маршрутизацией (у меня вот доигрались, .com и .org отпали), то и сеть и тырнет работать будут, а скрипт будет говорить совешенно иное ;)

expelled ★★ ()
Ответ на: комментарий от expelled

да ну вас ))) всё всё равно не предусмотреть...Я не собераюсь писать мега пупер программу на все случаи жизни с блекджеком и шлюхами...Я более чем уверен что в 99% того что есть достаточно. Добавить в условие (ya.ru or google.com) и баста.

Timuridze ()

Набыдлокодил что-то похожее под говноЙоту. В Краснодаре сеть нестабильна, связь обрывает, «флешка» виснет. В дефолтной установке madwimax не очень то справляется.
cat /usr/sbin/mywmax.sh

#!/bin/bash
while true
do
ping www.ya.ru  -c5
if [ "$? " -ne 0 ]
then
echo "restarting.."
killall -2 madwimax
madwimax -vv -e /usr/etc/madwimax/event.sh &
sleep 90
else
sleep 15
fi
cat /usr/etc/madwimax/event.sh
#!/bin/sh
# Usage: event.sh <event> <if-name>

case "$1" in
if-create)
	;;
if-up)
	killall dhclient 
	dhclient wimax0 &
	;;
if-down)
	killall dhclient 
	;;
if-release)
	killall dhclient 
	;;
*)
	echo "Usage: $0 { if-create | if-up | if-down | if-release }" >&2
	exit 3
	;;
esac
Если к этому добавить emerge --resume в цикле, то можно за ночь что-нибудь серьезное заэмёржить )

deathmagnetic ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.