Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Как реализовать проверку инетнет каналов ?  (Прочитано 671 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ulan44

  • Автор темы
  • Участник
  • *
  • Сообщений: 166
    • Просмотр профиля
Как реализовать данное чудо на perl ?
задача такова
есть интернет канал, и время от времени падает, нужно чтобы скрипт как-нибудь сек что интернет упал и писал в лог фаил ?

Оффлайн pterodaktil

  • Активист
  • *
  • Сообщений: 785
  • "Suum cuique" (Каждому свое)
    • Просмотр профиля
Re: Как реализовать проверку инетнет каналов ?
« Ответ #1 : 20 Октября 2009, 07:40:45 »
Самый простой метод пинг. Пингуешь скажем шлюз прова  Не пингуется - it's dead
Одним из примеров громоздкой и бесполезной надстройки является интегрированная система WINDOWS фирмы Microsoft.

(c)Т.Э.Кренкель, А.Г.Коган, А.М. Тараторин. "Персональные ЭВМ в инженерной практике"

Оффлайн ulan44

  • Автор темы
  • Участник
  • *
  • Сообщений: 166
    • Просмотр профиля
Re: Как реализовать проверку инетнет каналов ?
« Ответ #2 : 20 Октября 2009, 07:42:28 »
Самый простой метод пинг. Пингуешь скажем шлюз прова  Не пингуется - it's dead

А поподробнее можно хотя бы мааальнекий примерчик
заранее спасибо.

Пользователь решил продолжить мысль 20 Октября 2009, 08:13:42:
От налобал по быстрому... но чет не работает все равно
В общем имею два инет канала и нужно чтобы были всегда подняты так вот ip и интерфейсы забираются с mysql бызы
но при выполнении скрипа почему то даже если при не работающем канале все равно показывает что все ок хотя на самом деле он не работает =(

#!/usr/bin/perl -w

use FindBin;
use lib $FindBin::Bin;
require 'inc/db.pl';
$db=Connect();
$q=$db->prepare("select gate, iface from gateway");
$q->execute;
while (($gate, $iface) = $q->fetchrow_array()) {
system("
ping -q -c 2 $gate -I $iface > /dev/null
if [ $& -eq 0]; then
echo 'Filed\t $iface'
else
echo 'Its ok\t $gate\t $iface'
fi
");
}
$q->finish();
$db->disconnect();
« Последнее редактирование: 20 Октября 2009, 08:13:42 от ulan44 »

Оффлайн Lion-Simba

  • Старожил
  • *
  • Сообщений: 1126
    • Просмотр профиля
Re: Как реализовать проверку инетнет каналов ?
« Ответ #3 : 20 Октября 2009, 09:17:52 »
Решение по подобному вопросу:
https://forum.ubuntu.ru/index.php?topic=33478.msg323680#msg323680
Оказываю индивидуальную платную техподдержку широкого профиля. Обращаться в ЛС или Jabber.

Оффлайн ulan44

  • Автор темы
  • Участник
  • *
  • Сообщений: 166
    • Просмотр профиля
Re: Как реализовать проверку инетнет каналов ?
« Ответ #4 : 20 Октября 2009, 09:53:02 »
я б хотел реализовать на perl и вот что еще странно
вот эта часть кода в bash работает замечательно толко в место gate и iface подставить значения

ping -q -c 2 $gate -I $iface > /dev/null
if [ $& -eq 0]; then
echo 'Filed\t $iface'
else
echo 'Its ok\t $gate\t $iface'
fi

а когда в perl делаешь так он от балды ставит статусы хз пока куда копать

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28469
    • Просмотр профиля
Re: Как реализовать проверку инетнет каналов ?
« Ответ #5 : 20 Октября 2009, 13:09:32 »
Да не нужен перл - простого /bin/sh хватит.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн ulan44

  • Автор темы
  • Участник
  • *
  • Сообщений: 166
    • Просмотр профиля
Re: Как реализовать проверку инетнет каналов ?
« Ответ #6 : 21 Октября 2009, 05:00:04 »
пока сделал так

#!/bin/sh

GW1="83.234.xxx.xxx";
IF1="eth0"

ping -c 3 -q $GW1 -I $IF1 > /dev/null
if [ $? -eq 0 ]; then
echo "$GW1      $IF1    up" >> /usr/local/scripts/utils/tmp/log_eth0;
 else
beep -f 1000 -n -f 2000 -n -f 2000
echo `date`     "$GW1   $IF1    down" >> /usr/local/scripts/utils/tmp/log_eth0;
fi

при падении канала будет и лог с времени писать + будет пищать системный динамик...
А про perl пока так и не понял, почему он выборочно ставить что интерфейс down или up,
хотя есть кое какое предположение, что не ставиться $iface в месте с ip принадлежащем данному интерфейсу
то есть если пинговать например 1.1.1.1 с интерфейсом eth0 допустим то интерфейс будет up,
так вот когда пинговать 2.2.2.2 который должен принадлежать интерфейсу eth1 то скорее всего он пингует его по интерфейсу опять таки через eth0...

 

Страница сгенерирована за 0.086 секунд. Запросов: 23.