Страница 1 из 1
Отслеживание линка на сетевухе
Добавлено: 2009-12-21 11:58:58
daemon
Добрый день!
Вопрос в теме озвучен, нужно как то отследить пропадание линка на сетевухе. Не пинга, ни другие методы мониторинга, а именно железно - оборудование выключено линка нет, регистрация этого дела в системе и действие.
Re: Отслеживание линка на сетевухе
Добавлено: 2009-12-21 12:27:25
iye
SNMP ?
Re: Отслеживание линка на сетевухе
Добавлено: 2009-12-21 13:05:24
daemon
Хм, не знаю даж...
Поясню всю ситуацию:
Есть УПС без интерфейсов, сервант домашний, поэтому не до проф железок. Ну и покупать для дома другой не имеет смысла. Схема такая:
[сервант] ----
[ADCL] ----
тырнет
......
| .............
|
....
[УПС] .........
220
.....
|
....
220

Отрубили питалово, сервант живет от упса, АДСЛ выключился - линк пропал.
Надо отследить и дать команду на выключение.
В биосе ПК настраиваем вкл при появлении питания.

Re: Отслеживание линка на сетевухе
Добавлено: 2009-12-21 13:26:41
iye
Линк какой ? И кто поднимает ? Если сам сервак нечто типа пппое то можно поставить в мпд даунлинк скрипт с каунтером на количество попаток. И например после 3 неудачных класть сервак.
Re: Отслеживание линка на сетевухе
Добавлено: 2009-12-21 17:12:47
terminus
/etc/crontab
/root/test.sh
Код: Выделить всё
#!/bin/sh
# esli na protjazhenii 5 minut interfeis ne UP, to TEST=5 i vipolnajem shutdown
TIME=0
TEST=0
while [ $TIME -ne 300 ]
do
ifconfig em0 | head -n 1 | grep UP > /dev/null
if [ $? -eq 1 ]
then
TEST=$(($TEST+1))
fi
sleep 60
TIME=$(($TIME+60))
done
if [ $TEST -eq 5 ]
then
shutdown -p now
fi
---
я там со скобками в while накасячил - исправил.
Re: Отслеживание линка на сетевухе
Добавлено: 2009-12-21 17:30:55
daemon
Линк какой ? И кто поднимает ?
ADSL модем поднимает соединение, когда нет питалова на ADSL - нет линка, сервак от УПСа еще какое то время трепыхается.

.
terminus вот спасибо!
Сейчас опробую скрипт.
Re: Отслеживание линка на сетевухе
Добавлено: 2009-12-21 19:05:07
daemon
Не гаснет что-то, перенаправил вывод в файл powertest.log, отрубил подождал, подрубил глянул что в файле:
Код: Выделить всё
ifconfig re0 | head -n 1 | grep UP >> /usr/local/etc/script/powertest.log
Код: Выделить всё
# less powertest.log
re0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
re0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
re0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
re0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
re0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
re0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
re0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
re0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
re0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
re0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
re0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
re0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
re0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
т.е. UP как было

Re: Отслеживание линка на сетевухе
Добавлено: 2009-12-21 20:35:58
daemon
А вот messages замечательно говорит когда ап, когда даун
Код: Выделить всё
# less /var/log/messages | grep link
Dec 21 18:09:53 kernel: re0: link state changed to DOWN
Dec 21 18:16:59 kernel: re0: link state changed to UP
Dec 21 18:21:19 kernel: re0: link state changed to DOWN
Понял, надо скорее по status: active или status: no carrier отслеживать.
Re: Отслеживание линка на сетевухе
Добавлено: 2009-12-21 21:34:26
terminus
Блин, ну да - че-то я лоханулся. Конечно же по status:
Код: Выделить всё
#!/bin/sh
# esli na protjazhenii 5 minut interfeis ne active, to TEST=5 i vipolnajem shutdown
TIME=0
TEST=0
while [ $TIME -ne 300 ]
do
ifconfig em0 | grep "status: active" > /dev/null
if [ $? -eq 1 ]
then
TEST=$(($TEST+1))
fi
sleep 60
TIME=$(($TIME+60))
done
if [ $TEST -eq 5 ]
then
shutdown -p now
fi
Re: Отслеживание линка на сетевухе
Добавлено: 2009-12-21 22:03:21
daemon
terminus 
Re: Отслеживание линка на сетевухе
Добавлено: 2009-12-25 11:12:53
Shuba
Вообщем данный скрипт я немного доработал:
Код: Выделить всё
#!/bin/sh
# Если на протяжении 5 минут интерфейс не активен, то TEST=5 и вырубаем комп
TIME=0
TEST=0
while [ $TIME -ne 300 ]
do
ifconfig rl0 | grep "status: active" > /dev/null
if [ $? -eq 1 ]
then
TEST=$(($TEST+1))
echo `date '+%Y.%m.%d %H:%M:%S'`' Питание от батареи' >> /var/log/power.log
fi
sleep 60
TIME=$(($TIME+60))
done
if [ $TEST -eq 5 ]
then
echo `date '+%Y.%m.%d %H:%M:%S'`" Питание отсутствует 5 минут, компьютер выключается" >> /var/log/power.log
shutdown -p now
fi
т.е. добавил 2 строки
Код: Выделить всё
echo `date '+%Y.%m.%d %H:%M:%S'`' Питание от батареи' >> /var/log/power.log
echo `date '+%Y.%m.%d %H:%M:%S'`" Питание отсутствует 5 минут, компьютер выключается" >> /var/log/power.log
После помещения в crontab имеем при работе от сети и работающем модеме:
Код: Выделить всё
2009.12.25 09:50:00 Питание от батареи
2009.12.25 09:51:00 Питание от батареи
2009.12.25 09:52:00 Питание от батареи
2009.12.25 09:53:00 Питание от батареи
2009.12.25 09:54:00 Питание от батареи
2009.12.25 09:55:00 Питание от батареи
2009.12.25 09:55:00 Питание отсутствует 5 минут, компьютер выключается
2009.12.25 09:56:00 Питание от батареи
2009.12.25 09:57:00 Питание от батареи
2009.12.25 09:58:00 Питание от батареи
2009.12.25 09:59:00 Питание от батареи
2009.12.25 10:00:00 Питание отсутствует 5 минут, компьютер выключается
2009.12.25 10:00:00 Питание от батареи
2009.12.25 10:01:00 Питание от батареи
2009.12.25 10:02:00 Питание от батареи
2009.12.25 10:03:00 Питание от батареи
2009.12.25 10:04:00 Питание от батареи
2009.12.25 10:05:00 Питание отсутствует 5 минут, компьютер выключается
2009.12.25 10:05:00 Питание от батареи
2009.12.25 10:06:00 Питание от батареи
хотя при запуске в консоли всё нормально (модем вырубать не получилось - находится на другом конце города), т.е. в кронтабе не правильно сроватывает данные строки:
Код: Выделить всё
ifconfig rl0 | grep "status: active" > /dev/null
if [ $? -eq 1 ]
then
TEST=$(($TEST+1))
echo `date '+%Y.%m.%d %H:%M:%S'`' Питание от батареи' >> /var/log/power.log
fi
и
Re: Отслеживание линка на сетевухе
Добавлено: 2009-12-25 13:46:05
Shuba
Вообщем нашёл в чём были грабли. Окончательный вариант будет такой:
Код: Выделить всё
#!/bin/sh
# Если на протяжении 5 минут интерфейс не активен, то TEST=5 и вырубаем комп
TIME=0
TEST=0
while [ $TIME -ne 300 ]
do
/sbin/ifconfig rl0 | grep "status: active" > /dev/null
if [ $? -eq 1 ]
then
TEST=$(($TEST+1))
echo `date '+%Y.%m.%d %H:%M:%S'`' Питание от батареи' >> /var/log/power.log
fi
sleep 60
TIME=$(($TIME+60))
done
if [ $TEST -eq 5 ]
then
echo `date '+%Y.%m.%d %H:%M:%S'`" Питание отсутствует 5 минут, компьютер выключается" >> /var/log/power.log
/sbin/shutdown -p now
fi
Re: Отслеживание линка на сетевухе
Добавлено: 2009-12-25 13:49:42
terminus
Я ваш вариант проверил - у меня работает без проблем. В компе две сетивухи - одна подключена, а вторая нет. Если поставить проверку той что подключена то никаких сообщений и срабатываний, а если ту что не подключена то срабатывания. Вы правильную сетевуху указываете - может, не знаю - не rl0, а rl1 надо, типа...
К стати скрипт можно немного улучшить - выполнять не shutdown -p now а -h now (halt). Если еще в биосе выставить запуск при подаче питания, то тогда комп будет самостоятельно подыматься когда свет вернется.
Код: Выделить всё
#!/bin/sh
# Если на протяжении 5 минут (300 сек) интерфейс не активен, то TEST=5 (300/60) и вырубаем комп
# NIC - сетевой интерфейс который надо мониторить
# TIMEOUT - задержка в секундах перед выключением компьютера
NIC=rl0
TIMEOUT=300
###
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
MINUTES=$(($TIMEOUT/60))
TIME=0
TEST=0
while [ $TIME -ne $TIMEOUT ]
do
ifconfig $NIC | grep "status: active" > /dev/null
if [ $? -eq 1 ]
then
TEST=$(($TEST+1))
echo `date '+%Y.%m.%d %H:%M:%S'`' Питание от батареи' >> /var/log/power.log
fi
sleep 60
TIME=$(($TIME+60))
done
if [ $TEST -eq $MINUTES ]
then
echo `date '+%Y.%m.%d %H:%M:%S'`" Питание отсутствует $MINUTES минут, компьютер выключается" >> /var/log/power.log
shutdown -h now
fi
Re: Отслеживание линка на сетевухе
Добавлено: 2009-12-25 17:18:59
Shuba
Ну так потому и не работало, что в первоначальном варианте не было
соответственно из-за того, что ifconfig и shutdown находятся в /sbin и этот путь при исполнении кроном не учитывается всё и не работало. Ща я уже запустил и протестил свой вариант, пашет ну ура!