Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2008-12-09 08:57:48

  webmaster@esco.pl - Nowy użytkownik

webmaster@esco.pl
Nowy użytkownik
Zarejestrowany: 2008-12-09

[BASH] Monitor sieci

Witajcie,

W przypływie weny twórczej spłodziłem sobie skrypcik do monitorowania sieci - zdefiniowanych wcześniej hostów. Działa w oparciu o polecenie ping. Ogólnie działa Oki ale chciałbym jeszcze wrzucić go w jakiś lepszy interface. Tutaj listingi

plik dslmonitorproces - skrypt odpalony w cronie sprawdza hosty co powiedzmy 10 min.

Kod:

#!/bin/bash

counter=0
until [ $counter -ge $(wc -l<hosts.db) ]
do
    counter=$[counter + 1]
    
    host=`head -n$counter hosts.db | tail -n1 | cut -d : -f 1`
    city=`head -n$counter hosts.db | tail -n1 | cut -d : -f 2`
    id=`head -n$counter hosts.db | tail -n1 | cut -d : -f 3`
    phone=`head -n$counter hosts.db | tail -n1 | cut -d : -f 4`
    
    ping -q -c2 -n -s 3 $host
    
    if [ "$?" = "0" ]; then 
        
        status="[Online]" 
    else 
        
        status="Offline !!!" 
    fi
    
    echo -e "$id\t$host\t$city $status">>pings_tmp.db
    
done
cat pings_tmp.db>pings.db
unlink pings_tmp.db
echo -e "\a"

pobiera hosty z pliku host.db który ma strukture:

Kod:

iphosta1:miasto:id:telefon
iphosta2:miasto:id:telefon

i wpisuje rezultaty w formie wynikowej do wyświetlenia w pliku pings.db

Kod:

id   ip    miasto   telefon
....

plik pings.db jest wyswietlany za pomoca skryptu start w dialogu textbox:

Kod:

#!/bin/bash

until [ "$x" = "1" ]
do

curentdate=`date`
time=`stat --print=%y pings.db`
dialog --title "Status sieci z $time" --backtitle "Monitor Sieci $curentdate" --exit-label "Refresh" --timeout 30 --textbox pings.db 20 70
done

dialog odmierzany co 30 sekund, ogólny mechanizm:

hosts.db -> dslmonitorproces -> pings.db -> start

jest jescze skrypt dodajacy nowe hosty do tej płaskiej bazy ale nie będe go tu przedstawiał


Tak jak już pisałem wszystko fajnie funkcjonuje oprócz:

ad1. wyniki mam przedstawione w dialogu który znajduje się w pętli co strasznie utrudnia wyjście ze skryptu?
ad2. czy istnieje jakiś inny sposób przedstawienia tych danych w formie 'tabelarycznej', który pozwoliłby na odswierzanie wyników oraz możliwiość dołączenia dodatkowych opcji do wyboru?

Myślałem o skrypcie generującym kod html ale nie chcem instalować na tym serku apacha.

Pozdrawiam
Michał

Offline

 

#2  2008-12-09 10:52:10

  azhag - Admin łajza

azhag
Admin łajza
Skąd: Warszawa
Zarejestrowany: 2005-11-15

Re: [BASH] Monitor sieci

webmaster@esco.pl napisał(-a):

Myślałem o skrypcie generującym kod html ale nie chcem instalować na tym serku apacha.

I słusznie, apache byłby jak strzelanie z armaty do muchy. Za to możem zainstalować na serku inny malutki serwer HTTP, np. thttpd, boa, fnord, dhttpd, mini-httpd, monkey, etc.

Na upartego w ogóle nie trzeba instalować serwera HTTP, tylko wyświetlać na shellu wynik za pomocą tekstowej przeglądarki (w3m, links, elinks, lynx), choć serwer HTTP chyba byłby lepszy.


Błogosławieni, którzy czynią FAQ.
opencaching :: debian sources.list :: coś jakby blog :: polski portal debiana :: linux user #403712

Offline

 

#3  2008-12-09 11:48:04

  keddie - Użytkownik

keddie
Użytkownik
Skąd: localhost
Zarejestrowany: 2008-04-22

Re: [BASH] Monitor sieci

nc ! :D

// ? -- azhag

Ostatnio edytowany przez azhag (2008-12-09 12:06:57)

Offline

 

#4  2008-12-09 13:26:12

  Minio - Użyszkodnik

Minio
Użyszkodnik
Skąd: Poznań, Polska
Zarejestrowany: 2007-12-22
Serwis

Re: [BASH] Monitor sieci

webmaster@esco.pl napisał(-a):

W przypływie weny twórczej spłodziłem sobie skrypcik do monitorowania sieci - zdefiniowanych wcześniej hostów. Działa w oparciu o polecenie ping.

Ale zdajesz sobie sprawę, że to że komputer odpowiada na ping wcale nie oznacza, że prawidłowo spełnia swoją funkcję? (No chyba że chodzi o kompytery klienckie.)

webmaster@esco.pl napisał(-a):

Kod:

#!/bin/bash

counter=0
until [ $counter -ge $(wc -l<hosts.db) ]
do
    counter=$[counter + 1]
    
    host=`head -n$counter hosts.db | tail -n1 | cut -d : -f 1`
    city=`head -n$counter hosts.db | tail -n1 | cut -d : -f 2`
    id=`head -n$counter hosts.db | tail -n1 | cut -d : -f 3`
    phone=`head -n$counter hosts.db | tail -n1 | cut -d : -f 4`

ZOMFG.

Kod:

while read line ; do 
   host=$(echo "$line" |awk -F : '{print $1}')
   ....
done < /sciezka/do/hosts.db

Kolejne pola (city etc.) przypisane są kolejnym liczbom naturalnym. Więc w city musisz użyć zmiennej $2 itd.

Aha — rozsądniej byłoby podać ścieżkę absolutną do pliku hosts.db. Różne rzeczy się zdarzają.

webmaster@esco.pl napisał(-a):

cat pings_tmp.db>pings.db
unlink pings_tmp.db

Słyszałeś kiedyś o mv?

webmaster@esco.pl napisał(-a):

i wpisuje rezultaty w formie wynikowej do wyświetlenia w pliku pings.db

Kod:

id   ip    miasto   telefon
....

Nie. Jakkolwiek przypisujesz wartość zmiennej $phone, nigdzie z niej nie korzystasz.

webmaster@esco.pl napisał(-a):

until [ "$x" = "1" ]

To taki pokręcony sposób na while [ true ]?

azhag: chodzi o program netcat.

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Nas ludzie lubią po prostu, a nie klikając w przyciski ;-)