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
Ответ на: комментарий от fluorite

Неее....))) не надо я его в дефолтный язык прописал.

Timuridze
() автор топика
Ответ на: комментарий от 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
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.