Мы — долго запрягаем, быстро ездим, и сильно тормозим.
|
|||||
www.lissyara.su
—> статьи
—> FreeBSD
|
|
Теперь создаем файл startinet.sh
|
Делаем эти файлы выполняемыми и добавляем в крон запуск startinet.sh, например каждую минуту.
Вот вроде и все. В конце месяца можем предъявить файл internet.log провайдеру.
Нашел более правильный способ.
В параметрах подключения в файле ppp.conf добавляем
|
Теперрь можно без всяких скриптов обойтись.
размещено: 2006-11-14,
последнее обновление: 2007-03-15,
автор: BAV_Lug
proxy-man, 2006-11-15 в 13:56:53
Молодцом камрад!!! Остро-насущная тема однако... :-)
Vlad11, 2006-11-16 в 0:15:47
У меня тоже подключение через PPPoE, но у меня скрипт автоматом подумыется при дисконнекте.
ckpom, 2006-11-19 в 8:54:04
пасиб, как раз думал... а сач и думать не надо стало )))
warden, 2006-11-22 в 15:37:05
Спасибо за статью, весьма актуальна!
В startinet.sh последняя строка:
/usr/local/etc/myscript/TESTINET.SH ???
TESTINET.SH откуда взялось?
BAV_Lug, 2006-11-23 в 11:58:51
Ошибка, поправил.
info, 2006-11-30 в 9:19:42
Хуже нет определять связь по пингам, необходимо определять по наличию устроства в системе, при такой проверке связь может прыгать каждую минуту -)
BAV_Lug, 2006-11-30 в 12:08:18
В том то и дело, что устройство есть, а связи нет :(
А прыгать не будет. Если у вас из трех пингов к ДНС прова не прошел не один, то только тогда мы считаем, что связи нет (кстати их количество легко можно увеличить, но вот зачем?)
Аноним, 2007-01-03 в 16:21:14
Только такие методы плодят у Укртелекома "нулевые коннекты"
А они за такие вещи даунят порт и просят искать другие методы восстановления соединения после падения линка.
Модем настореный РОУТЕРОм спасает от таких неприятных казусов ))
Lemegeton, 2007-01-11 в 17:05:38
>> # Ждем пока помрут тунели (этот параметр индивидуален и
>> # подбирается экспериментальным путем)
>> sleep 5
Хм, ненадежно - процессы имеют свойство со временем завершаться все дольше и дольше... ;) Можно взглянуть на FreeBSD'шный rc.subr скрипт и "выцепить" оттуда пару функций по остановке процессов (wait_for_pids(), _find_processes() etc...), или просто подключть /etc/rc.subr, для FreeBSD'шников, которые помогут дожидаться завершения процессов, а не подгонять время их завершения вручную.
Весельчак У., 2007-03-16 в 16:41:32
А mpd если попользовать? :-)
proxy-man, 2007-05-14 в 19:15:18
to BAV_Lug - в связи с тем, что появились дополнения к этой статье, касающиеся работы ppp, интересует полный конфиг ppp.conf при условии использования данных опций:
enable lqr # Включаем Link Quality Request. Каждый N секунд вам посылаеться сигнал от сервера
# и если сервер не получает ответа, то соединение разрываеться.
set lqrperiod 5 #Ставим N=5 для предыущей строки.
dvg_lab, 2007-07-28 в 22:17:31
c mpd вообще ничего изобретать не надо, и протоколы оно все умеет и умное само по себе. Выдираешь кабель из сетевухи - все падает, втыкаешь обратно и секунд через 10 все работает - красота :-) mpd рулит.
from siveria, 2007-11-12 в 11:06:11
ето токо на украине могут быть такие проблемы? :)
mdv, 2008-03-26 в 14:14:46
конструкцию
===
is=`/sbin/ping -c 3 IP-адрес (например DNS прова) | grep -c "64 bytes"`
# Проверяем прошли ли пинги
if !(test $is -gt "0")
===
заменить на
===
if (ping -qnc3 $IP 2>&1 >/dev/null)
===
меньше кода и аккуратнее.
+ не надо городить конвеера ping + grep, а вдруг пакеты не по 64 байта захочется? придется менять не только ключики у пинга, а еще и паттерн у грепа ;)
+ не надо вызывать test
+ меньше переменных. особенно если $IP захардкодить. ;)
аналогично с
===
testz=`ps ax | grep -c testinet.sh`
if (test $testz -gt "1")
===
на
===
if (ps ax | grep -q [t]estinet.sh)
===
если греп найдет чего - вернет ноль
квадратные скобки отучат греп матчить самого себя, типа:
===
$ ps ax | grep testinet.sh
13962 p0 S+ 0:00.00 grep testinet.sh
===
в то время как ps ax | grep [t]estinet.sh не находит ничего ;)
mdv, 2008-03-26 в 14:21:35
до кучи.... в таких скритах правильнее pid-файл делать
типа в начале
if (test -f /tmp/testinet.pid)
then
if !(ps -p `cat /tmp/testinet.pid` 2>&1 >/dev/null)
then
echo $$ > /tmp/testinet.pid
else
exit 1
fi
else
echo $$ > /tmp/testinet.pid
fi
дур_прогер, 2008-09-23 в 14:44:20
кто ж так пишет скрипты и вообще проги? прямо в коде нечто "IP-адрес (например DNS прова)"
делай так: заведи переменную и прокоментарь ее как "IP-адрес (например DNS прова)", в переменной укажи как надо указывать адрес: ip или имя.
mad, 2008-11-07 в 0:08:00
в семерки такая комбинация проверки подключения
enable lqr echo
set reconnect 3 5
set redial 3 10
set lqrperiod 45
poison, 2008-12-02 в 15:05:44
/etc/crontab
*/5 * * * * root /usr/local/etc/inet_detect/dns.sh > /dev/null 2>&1
59 23 * * * root /usr/local/etc/inet_detect/logsrotate.sh > /dev/null 2>&1
/usr/local/etc/inet_detect/
-rwxr-xr-x 1 root 1001 656B 2 дек 14:43 dns-detect.sh
-rwxr-xr-x 1 root 1001 197B 2 дек 14:44 dns.sh
-rwxr-xr-x 1 root poison 1,6K 2 дек 11:57 log2html.sh
---x--x--x 1 root poison 1,0K 2 дек 11:58 logsrotate.sh
#cat dns.sh
#!/bin/sh
#
# Проверяем наличие скрипта в памяти
dnsd="/usr/local/etc/inet_detect/dns-detect.sh"
if (ps ax | grep [d]ns-detect.sh)
then
exit 1 # Если уже есть, то выходим
else ${dnsd}
fi
#cat dns-detect.sh
#!/bin/sh
#
log="/var/log/inet_detect/dns-detect.html"
nr="" # Флаг пропадания инета
ni="" # Флаг появления инета
ip="YOUR_DNS_IP"
#
while !(test $ni)
do
pings=`/sbin/ping -c 4 ${ip} | grep -c "[i]cmp"` > /dev/null 2>&1
if !(test $pings -gt "0" ) > /dev/null 2>&1 # Проверяем прошли ли пинги
then
if !(test $nr) > /dev/null 2>&1
then # Если инета нет, то запоминаем время
nr=1
timefix=`date`
fi
else
if (test $nr) > /dev/null 2>&1
then
echo "<TR bgcolor="DAE0E7"><TD \
align=center width=800><CODE style=font-size:12px> \
DNS не отвечал с $timefix до `date`</CODE></TD>" >> \
${log}
fi
ni=1
fi
done
#cat log2html.sh
#!/bin/sh
#
newfile="/usr/bin/touch"
say="/bin/echo"
#
dnstags='
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html;charset=koi8-r">
</HEAD>
<BODY style="margin: 0 0 0 0; padding: 0 0 0 0; BACKGROUND-COLOR: #f1f1f1; BORDE R-RIGHT: #999999 1px solid; MARGIN: 0px; BORDER- LEFT: #999999 1px solid; ">
<CENTER>
<TABLE width="800" border="0" cellpadding="0" cellspacing="0">
<TBODY>
<TR><TD width="800" bgcolor="#707680">
<TABLE border="0" width="800" cellspacing="1" cellpadding="3">
<TBODY>
<TR bgcolor="#B9CCDF">
<TD align="center" colspan="6">
<CODE><b>Статистика отсутствия связи с DNS</b></CODE>
</TD></TR>
<TR bgcolor="#f1f1f1"><TD align="center" colspan="6">
<CODE> </CODE></TD></TR>'
#
dnslog="/var/log/inet_detect/dns-detect.html"
#
${newfile} ${dnslog}
${say} ${dnstags} >> ${dnslog}
#cat logsrotate.sh
#!/bin/sh
#
# Set variables
#date="/bin/date"
copy="/bin/cp"
makedir="/bin/mkdir"
send="/usr/bin/mail"
del="/bin/rm"
say="/bin/echo"
worldlog="/var/log/inet_detect/world-detect.html"
dnslog="/var/log/inet_detect/dns-detect.html"
log2html="/usr/local/etc/inet_detect/log2html.sh"
webdir="/usr/local/www/apache22/https/pings"
lastday=`date -v1d -v+1m -v-1d "+%d"`
currday=`date "+%d"`
dirname=`date "+%Y%m"`
closetags='</TBODY></TABLE></TD></TR></TBODY></TABLE><BR><BR></BODY></HTML>'
#
# Program begin
if [ ${lastday} -eq ${currday} ] > /dev/null 2>&1
then
${say} ${closetags} >> ${worldlog}
${say} ${closetags} >> ${dnslog}
${send} -s "Internet ping failures." root@rjhost.ru < ${worldlog}
${send} -s "DNS ping failures." root@rjhost.ru < ${dnslog}
cd ${webdir}
${makedir} ${dirname}
${copy} ${worldlog} ${webdir}/${dirname}/
${copy} ${dnslog} ${webdir}/${dirname}/
${del} ${worldlog}
${del} ${dnslog}
${log2html}
else
# echo -n "Сегодня не последний день месяца"
# echo "."
fi
poison, 2008-12-02 в 15:10:42
Комменты:
данная конструкция в последний день месяца отправляет админу логи и копирует их в папку доступную по http,
после чего трет и создает новые.
ufs, 2009-04-12 в 16:01:03
mad, 2008-11-07 в 0:08:00
>в семерки такая комбинация проверки подключения
>enable lqr echo
>set reconnect 3 5
>set redial 3 10
>set lqrperiod 45
У меня это и в 6.2 было...
Xan, 2010-01-21 в 15:55:43
# (хотя в принципе этого можно и не делать)
sleep 5
else
зачем после sleep идёт else ?
это при том, что выше указано fi то есть, что конструкция if then else закрыта.
Этот информационный блок появился по той простой причине,
что многие считают нормальным, брать чужую информацию не уведомляя автора
(что не так страшно), и не оставляя линк на оригинал и автора — что более существенно.
Я не против распространения информации — только за. Только условие простое — извольте
подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой,
незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
Если соизволите поставить автора в известность — то вообще почёт вам и уважение.
© lissyara 2006-10-24 08:47 MSK
Комментарии пользователей [21 шт.]