LINUX.ORG.RU

[sh] help me or kill me;

 


0

2

Я никогда видимо не смогу понять этот язык, тем не менее иногда очень нужен. Сейчас пишу скрипт хранителя интернета - проверяет наличие/отсутсвие интернета и предпринимает действия для исправления ситуации + пишет лог. Вот сие чудо:

#!/bin/bash
logfile="inet_statistics.log" # как вот это

while true; do
	result0=$(ping -c 3 google.ru | tail -2 | head -1 | awk '{print $4}')
	if [ $result0 -eq 0 ]; then
		echo "Интернет отвалился примерно "`date`" (+- 8 минут)" >> inet_statistics.log	# использовать здесь	
		while [ $result0 -eq 0 ]; do
			echo "Пробуем перезагрузить сетевой интерфейс eth0..." >> inet_statistics.log # и вообще везде?
			# \/ надо бы заменить на ./restartinet.sh
			$(ifdown eth0 && ifup eth0) >> inet_statistics.log # как записать выхлоп команд в лог?
			echo "Проверяем результат " >> inet_statistics.log
			result0=$(ping -c 3 google.ru | tail -2 | head -1 | awk '{print $4}')
			if [ $result0 -eq 0 ]; then
				echo "Интернет не поднялся, повторная попытка через 4 минуты." >> inet_statistics.log
			fi
			sleep 240
		done
		echo "Интернет заработал "`date`"\n\n" >> inet_statistics.log
	fi
	sleep 480
done

Осталось совсем чуть чуть... Помогите...

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

вынеси offtop в отдельную тему. А то нехорошо получается, ТС админский скрипт мучает, а мы тут dmenu/dfm обсуждаем :)

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

Так что там у тебя, заработало?

Я спать пошёл, а команды типа «date echo test» и так попадают в логи, без «exec 2&>1». Фиг с ним, пусть хотяб
«Starting Avahi mDNS/DNS-SD Daemon: avahi-daemon.
Stopping Avahi mDNS/DNS-SD Daemon: avahi-daemon.»
пишет, проблема в том что ping может возвращать 0 и при неудачи(не смог пингануть и закрылся, без ошибок).

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

Перенаправление 2&>1 должно перенаправить вывод ошибок на стандартный вывод, то есть в данном случае в общий лог.

Но, по сути здесь это вторично. Тебе можно просто отключить перенаправление вообще, запускать из терминала и смотреть что происходит.

И, как правильно сказал MKuznetsov, полезно вообще разобраться в чём действительно проблема. Может быть действительно кэширующий прокси пойдёт на пользу.

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

>запускать из терминала и смотреть что происходит

Он у меня на домашнем серваке должен из rc.local запускаться в background, для этого и нужен файл лога.

разобраться в чём действительно проблема

Проблема приблизительно такая: когда на балансе остаётся меньше 100 руб(хотя это не долг!), интернеты периодически перестают работать(видимо сделано для напоминания хомячкам), помогает «передёргивание» интерфейса, на виндах я не знаю что бы происходило.

в общем вместо строки ifdown && ifup будет ./repairInternet.sh в котором возможно будет более правильное решение проблемы.

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

Вообще я бы сменил такого провайдера. Хотя, насколько я понимаю, выбора нет.

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

>Так для отладки можно и руками несколько раз подёргать, прежде чем на место ставить.

Не понял. Что значит на место? Я его тестирую на десктопе(выдёргиваю шнур из сетевухи:) )

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

Запускать в терминале вручную и смотреть как работает.

Можно также на время отладки в шабанг добавить ключ -x (#!/bin/bash -x), тогда bash будет показывать каждую команду которую выполняет.

sin_a ★★★★★
()

Вроде финальный вариант:

#!/bin/bash

logFile="inet_statistics.log"
checkTime=10
retryTime=4

function check { # если возвращает 0, значит интернета нет
	return $(ping -c 3 8.8.8.8 | tail -2 | head -1 | awk '{print $4}')
}

function repair { 
	ifdown eth0 && ifup eth0
}

while true; do {
	check
	if [ $? -eq 0 ]; then
		echo "Интернет отвалился примерно "`date`" (+- "$checkTime" секунд)"	
		while [ $? -eq 0 ]; do
			echo "Пробуем починить..."
			repair
			echo "Проверяем результат "
			check
			if [ $? -eq 0 ]; then
				echo "Интернет не поднялся, повторная попытка через "$retryTime" секунд."
				sleep $retryTime
			else
				break
			fi
		done
		echo "Интернет заработал "`date`
		echo "--------------------------------"
	fi
	sleep $checkTime
	} >> $logFile
done

Логи:

Интернет отвалился примерно Wed Aug 3 20:26:48 YEKST 2011 (+- 10 секунд)
Пробуем починить...
Starting Avahi mDNS/DNS-SD Daemon: avahi-daemon.
Проверяем результат 
Интернет не поднялся, повторная попытка через 4 секунд.
Пробуем починить...
Проверяем результат 
Интернет не поднялся, повторная попытка через 4 секунд.
Пробуем починить...
Stopping Avahi mDNS/DNS-SD Daemon: avahi-daemon.
Проверяем результат 
Интернет заработал Wed Aug 3 20:27:45 YEKST 2011
--------------------------------

Всем спасибо, и последний вопрос как отвязать скрипт от терминала (на всякий случай)?

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

Первые настоящие логи:

Интернет отвалился примерно Thu Aug 4 05:34:19 YEKST 2011 (+- 480 секунд)
Пробуем починить...
Reloading /etc/samba/smb.conf: smbd only.
Reloading /etc/samba/smb.conf: smbd only.
Проверяем результат 
Интернет не поднялся, повторная попытка через 240 секунд.
Пробуем починить...
Reloading /etc/samba/smb.conf: smbd only.
Reloading /etc/samba/smb.conf: smbd only.
Проверяем результат 
Интернет заработал Thu Aug 4 05:38:41 YEKST 2011
--------------------------------
Интернет отвалился примерно Thu Aug 4 05:54:55 YEKST 2011 (+- 480 секунд)
Пробуем починить...
Reloading /etc/samba/smb.conf: smbd only.
Reloading /etc/samba/smb.conf: smbd only.
Проверяем результат 
Интернет не поднялся, повторная попытка через 240 секунд.
Пробуем починить...
Reloading /etc/samba/smb.conf: smbd only.
Reloading /etc/samba/smb.conf: smbd only.
Проверяем результат 
Интернет не поднялся, повторная попытка через 240 секунд.
Пробуем починить...
Reloading /etc/samba/smb.conf: smbd only.
Reloading /etc/samba/smb.conf: smbd only.
Проверяем результат 
Интернет заработал Thu Aug 4 06:03:30 YEKST 2011
--------------------------------
Интернет отвалился примерно Thu Aug 4 06:11:42 YEKST 2011 (+- 480 секунд)
Пробуем починить...
Reloading /etc/samba/smb.conf: smbd only.
Reloading /etc/samba/smb.conf: smbd only.
Проверяем результат 
Интернет не поднялся, повторная попытка через 240 секунд.
Пробуем починить...
Reloading /etc/samba/smb.conf: smbd only.
Reloading /etc/samba/smb.conf: smbd only.
Проверяем результат 
Интернет не поднялся, повторная попытка через 240 секунд.
Пробуем починить...
Reloading /etc/samba/smb.conf: smbd only.
Reloading /etc/samba/smb.conf: smbd only.
Проверяем результат 
Интернет не поднялся, повторная попытка через 240 секунд.
Пробуем починить...
Reloading /etc/samba/smb.conf: smbd only.
Reloading /etc/samba/smb.conf: smbd only.
Проверяем результат 
Интернет не поднялся, повторная попытка через 240 секунд.
Пробуем починить...
Reloading /etc/samba/smb.conf: smbd only.
Reloading /etc/samba/smb.conf: smbd only.
Проверяем результат 
Интернет не поднялся, повторная попытка через 240 секунд.
Пробуем починить...
Reloading /etc/samba/smb.conf: smbd only.
Reloading /etc/samba/smb.conf: smbd only.
Проверяем результат 
Интернет не поднялся, повторная попытка через 240 секунд.
Пробуем починить...
Reloading /etc/samba/smb.conf: smbd only.
Reloading /etc/samba/smb.conf: smbd only.
Проверяем результат 
Интернет заработал Thu Aug 4 06:37:22 YEKST 2011
--------------------------------

Щикарно (с)

P.S. баланс минус 300 руб ;)

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