Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: skript nebo utilita na test internetu? [vyřešeno]  (Přečteno 4811 krát)

On

  • Stálý člen
  • **
  • Příspěvků: 1136
    • Operační systémy
skript nebo utilita na test internetu? [vyřešeno]
« kdy: 03 Dubna 2009, 12:09:52 »
Neví někdo o nějaké utilitě, případně kdo se trochu vyzná v programování, jak by se dal vytvořit nějaký jednoduchý skript na test internetu? Když to shrnu hodně laicky:

když vypadne internet, aby mi vyhodilo hlášku hned, jak zase naskočí...ať nemusím neustále zkoušet ping...jak pako...ten skript by měl obsahovat něco jako "když ping www.centrum.cz bude ok, potom echo "zapnuto" "..."if ping www.centrum.cz nebude OK (nedojde odezva), when reply, tzn: ping www.centrum.cz"...a bude to zkoušet za mě tak dlouho, dokud nenaběhne...

aj bych to nějak sesmolil, ale nenapadá mě způsob ohlášení této zprávy..představoval bych si něco podobného, jak když si v pidginu nastavíte sledování kamarádů a onen člověk se připojí, vyskočí tabulka s vámi nadefinovaným textem...tak aby vyskočilo např "internet v provozu", kliknu na OK a hotové...samozřejmě ta tabulka tam musí zůstat do doby, než ji sám neodkliknu (aby sama nezmizela)...nebo něco podobného..nápad by byl?
« Poslední změna: 03 Dubna 2009, 22:02:52 od Martin 'Želva' Malý »
Asus M2A-VM HDMI, Athlon 64 X2 4800+, 4GB DDR2/800Mhz,Powercolor HD 2600 XT, Ubuntu 10.10
Být posledním nevadí, ale nikdy nesmíte být poslední dvakrát po sobě - Iacocca

nettezzaumana

  • Host
Re: skript nebo utilita na test internetu?
« Odpověď #1 kdy: 03 Dubna 2009, 12:39:00 »
Kód: [Vybrat]
#!/bin/bash
while :; do
    ping seznam.cz -c 3 &>/dev/null;
    if test "$?" -ne "0"; then
      ## nutno overit zdali je opravdu vychozi
      ## graficka konzole na :0
      DISPLAY=:0 xterm -e 'echo nejde net !!; read';
    fi
    sleep 5;
done

spoustet jako ne root pri startupu pomoci ::
su username -c /cesta/ke/skriptu

On

  • Stálý člen
  • **
  • Příspěvků: 1136
    • Operační systémy
Re: skript nebo utilita na test internetu?
« Odpověď #2 kdy: 03 Dubna 2009, 13:09:55 »
co říct...."hmm" a nebo ještě "+1"....dík, přesně to hledám
Asus M2A-VM HDMI, Athlon 64 X2 4800+, 4GB DDR2/800Mhz,Powercolor HD 2600 XT, Ubuntu 10.10
Být posledním nevadí, ale nikdy nesmíte být poslední dvakrát po sobě - Iacocca

On

  • Stálý člen
  • **
  • Příspěvků: 1136
    • Operační systémy
Re: skript nebo utilita na test internetu? [vyřešeno]
« Odpověď #3 kdy: 07 Dubna 2009, 14:47:51 »
Takže..cosi mě začalo programování bavit, tak jsem se pustil do výuky a za pomocí předchozího příspěvku NTZ jsem vytvořil tohle:

Kód: [Vybrat]
#!/bin/bash

ping www.centrum.cz -c 3 &> /tmp/ping

   if [ "$?" -eq "0" ]; then
notify-send -i face-smile Test 'net jede'
DISPLAY=:0 xterm -e 'cat /tmp/ping; read';

   else
notify-send -i face-smile Test 'NEJDE NET'
DISPLAY=:0 xterm -e 'cat /tmp/ping; read';

   fi
sleep 3s

Ať jsem hledal, jak jsem hledal, podmínka "$?" -ne "0"  je mi záhadou. Já jen změnil "-ne" na "-eq", což bych pochopil, co ale říká "$?" a "0" netuším...nicméně jsem se pustil do drobné úpravy, aby mi to vypisovalo i v případě, kdy se k netu zase připojím...skript sice funguje, ale do úzkých jsem se dostal v případě vytvoření smyčky.. Potřeboval bych, aby po odkliknutí jakéhokoliv stavu (ať už že net funguje nebo nefunguje), se mi tato hláška znovu nezobrazovala...resp. aby se nezobrazovaly dvě stejné hlášky po sobě..tzn. dojde k výpadku, ukáže se hláška, já ji odkliknu...a další hláška by se zobrazila až po změně stavu, tzn, až by se net zase připojil...Našla by se pomoc?
Asus M2A-VM HDMI, Athlon 64 X2 4800+, 4GB DDR2/800Mhz,Powercolor HD 2600 XT, Ubuntu 10.10
Být posledním nevadí, ale nikdy nesmíte být poslední dvakrát po sobě - Iacocca

premet

  • Host
Re: skript nebo utilita na test internetu? [vyřešeno]
« Odpověď #4 kdy: 07 Dubna 2009, 15:04:56 »
$? a "0" - jde o porovnávnávání, protože $? je návratová hodnota z předchozího příkazu, tedy jestli skončil úspešně  nebo neúspešně.

On

  • Stálý člen
  • **
  • Příspěvků: 1136
    • Operační systémy
Re: skript nebo utilita na test internetu? [vyřešeno]
« Odpověď #5 kdy: 08 Dubna 2009, 07:13:21 »
Podmínku úspěchu nebo neúspěchu předchozího příkazu jsem právě nemohl nikde najít, v různých manuálech na googlu jsem našel jen podmínky, co se týká existence souborů nebo porovnávání čísel nebo řetězců...a nejspíš by se to v nějaké kombinaci i dalo použít, jen jsem nevěděl jak.. takže k tomuto účelu slouží "$?" ? To je dobré vědět, díky..

EDIT: Jinak komu by tento prográmek pomohl, tady je zdrojový kód hotového programu v Pythonu. Má práce to bohužel není, dělal to bratr, funguje výborně...já se ještě pohraju v Shellu :)

Kód: [Vybrat]
#!/usr/bin/env python
from Tkinter import *
import subprocess
import string
import time
#import math

i=0
view=0
print "start monitoringu - vypnout CTRL+C"

while i<20:
   prikaz=["ping","www.centrum.cz","-c","1"]
   process = subprocess.Popen(prikaz,stdout=subprocess.PIPE,stdin=subprocess.PIPE,stderr=subprocess.PIPE)
   text=process.stdout.read()
   pozice=string.find(text,"unknown")
   if  len(text)==0 and view==0  :
            print "error network"
            root = Tk()
            w = Label(root, text=u"Vypadek site!")
            w.pack()
            root.mainloop()
            view=1
   elif len(text)>0 and view==1 :
            root = Tk()
            w = Label(root, text=u"Sit znovu funguje!")
            w.pack()
            root.mainloop()
            print "network start"
            view=0
   #i=i+1
   time.sleep(2) 
« Poslední změna: 08 Dubna 2009, 09:00:03 od On »
Asus M2A-VM HDMI, Athlon 64 X2 4800+, 4GB DDR2/800Mhz,Powercolor HD 2600 XT, Ubuntu 10.10
Být posledním nevadí, ale nikdy nesmíte být poslední dvakrát po sobě - Iacocca

On

  • Stálý člen
  • **
  • Příspěvků: 1136
    • Operační systémy
Re: skript nebo utilita na test internetu? [vyřešeno]
« Odpověď #6 kdy: 10 Dubna 2009, 07:12:16 »
Juchů, tak se mi to podařilo i v Shellu...jen bych potřeboval poradit. Vzhledem k tomu, že se snažím programovat teprve pátý den, tak jsem si jist, že můj zdrojový kód je zbytečně dlouhý a určitě to pujde nějak zjednodušit, ale to myslím není zas tak podstatné...Potřeboval bych ale radu, nemůžu nikde najít, jak udělat "smyčku ve smyčce", nebo nějaký příkaz, který mě na konci skriptu vrátí ne na začátek toho daného cyklu, ale na začátek celého skriptu..dle mnou přiloženého zdrojového kódu je patrné, že abych ho z konce dostal zpět na začátek, použil jsem znovuspuštění skriptu, ale výpis ps aux mi vypíše tolik spuštěných skriptů, kolik je výpadků, což teda si přiznejme, že není uplně ono :)

 
Kód: [Vybrat]
#!/bin/bash

ping www.centrum.cz -c 3 &> /tmp/ping

   if [ "$?" -eq "0" ]; then
notify-send -i face-smile www.centrum.cz 'spojení navázáno'
DISPLAY=:0 xterm -e 'date; cat /tmp/ping; read'
   
else
notify-send -u critical www.centrum.cz 'Výpadek sítě'
   fi

       while :; do

ping www.centrum.cz -c 3 &> /tmp/ping
   if [ "$?" -ne "0" ]; then
notify-send -u critical www.centrum.cz 'Výpadek sítě'
DISPLAY=:0 xterm -e 'date; cat /tmp/ping; read'; break
   fi

 sleep 1s
        done

        while :; do

ping www.centrum.cz -c 3 &> /dev/null
   if [ "$?" -eq "0" ]; then break
   fi
 sleep 1s
         done
/home/ladik/programovani/testnet
exit


- na konci skriptu je smyčka, kde se provádí ping tak dlouho, dokud nenajde spojení se serverem...až ho najde, tak.......tak bych potřeboval, aby se to vrátilo na začátek skriptu, ale trošku jiným způsobem, než ho znovu spustit :(
« Poslední změna: 10 Dubna 2009, 07:21:42 od On »
Asus M2A-VM HDMI, Athlon 64 X2 4800+, 4GB DDR2/800Mhz,Powercolor HD 2600 XT, Ubuntu 10.10
Být posledním nevadí, ale nikdy nesmíte být poslední dvakrát po sobě - Iacocca

nettezzaumana

  • Host
Re: skript nebo utilita na test internetu? [vyřešeno]
« Odpověď #7 kdy: 10 Dubna 2009, 11:02:36 »
zkus se na to podivat v perlu radsi nez v bashi .. viz `man Net::Ping`.. napr:
> perl -e 'use Net::Ping; $host="88.86.111.34"; $foo = Net::Ping->new(); print "host is alive\n" if $foo->ping($host); $foo->close()'
host is alive

On

  • Stálý člen
  • **
  • Příspěvků: 1136
    • Operační systémy
Re: skript nebo utilita na test internetu? [vyřešeno]
« Odpověď #8 kdy: 10 Dubna 2009, 12:16:49 »
Takže jinými slovy, pokud mám v jednom skriptu dva cykly, můžu jít jen směrem kupředu? Z jednoho cyklu na druhý se dostanu, ale zpět k prvnímu už ne? To mi právě přišlo divné, proto jsem se radši zeptal...

Perl..no, začal jsem s bashem, bratr mi už vysvětloval Python, kdybych do toho měl ještě studovat perl, asi mě odvezou :)) Už teď mám hlavu jak balón.Určitě na to ale mrknu, rád bych věděl, co bude nejlepší a u toho pak zůstal..v Bashi jsem myslím základ pochopil a docela se mi to líbí, tak ještě pár skriptů sesmolím. Zatím jsem tento problém vyřešil tak, že jsem nakopíroval 3x stejný skript pod sebe a až po tom třetím skriptu je zase spouštěč - čili zpět na začátek :) Já vím, těžce neprofesionální, ale zas tolik výpadků není, než se to dostane k tomu třetímu, tak vypnu pc a druhý den to startuje na novo, takže výsledek v podstatě je..

Každopádně díky...
« Poslední změna: 10 Dubna 2009, 12:21:01 od On »
Asus M2A-VM HDMI, Athlon 64 X2 4800+, 4GB DDR2/800Mhz,Powercolor HD 2600 XT, Ubuntu 10.10
Být posledním nevadí, ale nikdy nesmíte být poslední dvakrát po sobě - Iacocca

On

  • Stálý člen
  • **
  • Příspěvků: 1136
    • Operační systémy
Re: skript nebo utilita na test internetu? [vyřešeno]
« Odpověď #9 kdy: 10 Dubna 2009, 14:03:26 »
Unless...hmm, tak toho jsem se nedočetl..na tom by se dalo stavět. Super, jdu na to.
Asus M2A-VM HDMI, Athlon 64 X2 4800+, 4GB DDR2/800Mhz,Powercolor HD 2600 XT, Ubuntu 10.10
Být posledním nevadí, ale nikdy nesmíte být poslední dvakrát po sobě - Iacocca

nettezzaumana

  • Host
Re: skript nebo utilita na test internetu? [vyřešeno]
« Odpověď #10 kdy: 10 Dubna 2009, 15:33:16 »
Unless...hmm, tak toho jsem se nedočetl..na tom by se dalo stavět. Super, jdu na to.
.. until je to same co while akorat opacne .. takze ::

x=0 && until [ "$x" -gt "10" ]; do echo $x; x=$(($x + 1)); done
x=0 && while [ "$x" -lt "10" ]; do echo $x; x=$(($x + 1)); done

.. ps. sorry, neni to unless ale until

On

  • Stálý člen
  • **
  • Příspěvků: 1136
    • Operační systémy
Re: skript nebo utilita na test internetu? [vyřešeno]
« Odpověď #11 kdy: 12 Dubna 2009, 13:30:18 »
Jsem taky kus vo*a...stačilo pochopit princip smyčky..už vše funguje jak má, tady je skript v Bashi:

Kód: [Vybrat]
#!/bin/bash

prom="ping www.centrum.cz -c 3"
prom1="/tmp/ping"
   
    while :; do

$prom &> $prom1

if grep "packet" $prom1; then
   
  notify-send -i face-smile www.centrum.cz 'spojení navázáno'
  DISPLAY=:0 xterm -e 'date; cat /tmp/ping; read'

else notify-send -u critical www.centrum.cz 'Výpadek sítě'; continue
fi

### Detekce výpadku ###
   while :; do 
 
$prom &> $prom1

  if [ "$?" -ne "0" ]; then
notify-send -u critical www.centrum.cz 'Výpadek sítě'
DISPLAY=:0 xterm -e 'date; cat /tmp/ping; read'; break
  fi
   done
 
### Detekce obnovení sítě ###
   while :; do
$prom &> /dev/null
  if [ "$?" -eq "0" ]; then break
  fi
   done

 sleep 1s
    done

no nádhera, když něco dělá to, co člověk chce :)

Díky za rady...
Asus M2A-VM HDMI, Athlon 64 X2 4800+, 4GB DDR2/800Mhz,Powercolor HD 2600 XT, Ubuntu 10.10
Být posledním nevadí, ale nikdy nesmíte být poslední dvakrát po sobě - Iacocca

nettezzaumana

  • Host
Re: skript nebo utilita na test internetu? [vyřešeno]
« Odpověď #12 kdy: 12 Dubna 2009, 16:21:53 »
umh .. bohuzel to mas to nejak divne napsane .. break a continue nepatri do slovniku ciste programujiciho chlapce ;)

podivej na zpusob, jak jsem ti to napsal ja .. je to velice zjednodusene a rozdelene temer zbytecne do mnoha samostatnych
funkci, ale to je pro demonstraci jak jednotlive casti kodu maji do sebe zapadat ..

do meho kodu lze timto zpusobem (aka fci) doplnovat dalsi fce a ficury ..

Citace
#!/bin/bash

## lze ho dostat treba jako parametr vstupu
## v nasem pripade staticka hodnota

polling_interval="3";

##############
## funkce:

## hlavni funkce pro znazorneni, ze *vse
## probiha v ramci jednoho loopu !!

main_test() {

## promenna $state_ neni pouzita. timto zpusobem lze
## oznacovat v prubehu hlavniho cyklu ruzne eventy.
## Upozornuju na to, protoze v teto pozici nam kazdy
## prubeh promennou vyprazdni a nastavi na defaultni hodnotu ..

state_="waiting";

## cil generuju funkci get_target() jako retezec o delce
## 2 az 3 znaku slozeny z "a" az "z" + .com

target_=`get_target`.com;

## opinkame v kazdem prubehu nahodne vygenerovany server a
## overime navratovou hodnotu pingu ..
## pro oba pripady mame pripravenou zvlastni funkci, ve ktere
## se odehrava co mas nas skript delat ..

ping -c 2 "$target_" &>/dev/null;
if test $? -eq "0"; then
   state_="ok";
   all_good; else

   state_="bad";
   all_bad;
fi

## polling_interval uvnitr hlavni funkce na zaver
sleep $polling_interval;
};

all_good() {
notify-send -u normal "yeah!"  "got host at www.$target_";
};

all_bad() {
notify-send -u critical "umh!" "got no connection to www.$target_";
};

## docela by me zajimalo jak tohle udelat v bashi ;)
get_target() {
perl << 'EOF'

@chars = 'a' .. 'z';
$rand="";

for (1 .. 2 + rand 2) {
        $rand .= $chars[rand @chars];
};

print "$rand\n";

EOF
};

######################
## program ..

## !! ve skutecnosti se provadi takto jednoducha vec .. !!
while :; do
   main_test;
done

## nemel by nikdy nastat
exit 1;

« Poslední změna: 12 Dubna 2009, 20:08:25 od nettezzaumana »

nettezzaumana

  • Host
Re: skript nebo utilita na test internetu? [vyřešeno]
« Odpověď #13 kdy: 12 Dubna 2009, 16:52:28 »
ps. takze napriklad "detekci obnoveni site" bychom nacpali do funkce all_bad() .. vyskok z ni by zajistilo napriklad prirazeni a test promenne $state na jinou hodnotu nez "bad" se kterou do fce lezeme aka ::

while test "$state" = "bad"; do
    neco_co_muze_zmenit_state()
done


opakuji :: v mem reseni vyse neni defakto vubec zapotrebi pouzit jedine fce ve smyslu

fce() {
foo;
};

.. funkce jsem pouzil jen abych demonstroval, do jakych logickych celku lze rozdelit jednotlive ulohy ktere skript vykonava ..
« Poslední změna: 12 Dubna 2009, 17:06:40 od nettezzaumana »

On

  • Stálý člen
  • **
  • Příspěvků: 1136
    • Operační systémy
Re: skript nebo utilita na test internetu? [vyřešeno]
« Odpověď #14 kdy: 13 Dubna 2009, 10:09:20 »
Hehe...no...zapomněl jsem zmínit, že je mi naprosto jasné, že to lze nějak zjednodušit, programuji v podstatě od minulého pondělka, takže za 8 dní to jako profík asi neudělám :D Každopádně tvůj postup vypadá opravdu kapku jinak (pro mě zatím ne tak přehledně, pač pořádně nevím, co co znamená :) ). Bratr mi už přivezl docela pěknou bichli Python a jak jsem se tak díval na úvod, mohlo by to být Bashi dost podobné...hned poté se pustím do studování toho  Perlu, kombinací těchto tří prográmků už snad budu moct rozeznat, na kterou mnou vymyšlenou capinu budu potřebovat který program..

U toho Bashe jsem našel docela pěknou stránku na naučení:

http://www.root.cz/clanky/programovani-v-bash-shellu/
http://www.linuxexpres.cz/praxe/bash-1-dil-1
http://docs.linux.cz/programming/interpreted/bashdoc-1.4/

Je to od začátků až pro pokročilé, výborně vysvětleno..

Udělal jsem si už program pro convert z Wav do Mp3, změnu rozlišení fotek (640x480,800x600,1024x768) s tím, že buď se original soubor zachová nebo ne a malou utilitku pro vyčištění plochy..většinou když něco tahám z netu, tak to hážu na plochu, pač mě nebaví se proklikávat k cílové složce...takže natahám mp3 nebo fotky na plochu, spustím utilitu a roztřídí mi vše, co kam patří...jen mě mrzí, že jsem s těmahle věcma začal až teď.. Další prográmek, co mám v plánu bude pro čistku duplikovaných souborů ve vybrané oblasti..to už se teda ale asi nepatří, mrknu ještě na tu tvou úpravu


Asus M2A-VM HDMI, Athlon 64 X2 4800+, 4GB DDR2/800Mhz,Powercolor HD 2600 XT, Ubuntu 10.10
Být posledním nevadí, ale nikdy nesmíte být poslední dvakrát po sobě - Iacocca

nettezzaumana

  • Host
Re: skript nebo utilita na test internetu? [vyřešeno]
« Odpověď #15 kdy: 13 Dubna 2009, 13:31:27 »
snazil jsem se demonstrovat ze to co ty potrebujes lze dat do 3 radku kodu ..

while :; do
   main_test;
done

pricemz mam nadefinovano jeste par pridavnych funkci vc. main_test()

On

  • Stálý člen
  • **
  • Příspěvků: 1136
    • Operační systémy
Re: skript nebo utilita na test internetu? [vyřešeno]
« Odpověď #16 kdy: 13 Dubna 2009, 17:09:01 »
jj, už jsem to pochopil a je to čéče velmi elegantní řešení... Ty "funkce" začnu probírat v následujících dnech, to je pro mě zatím novinka :)
Asus M2A-VM HDMI, Athlon 64 X2 4800+, 4GB DDR2/800Mhz,Powercolor HD 2600 XT, Ubuntu 10.10
Být posledním nevadí, ale nikdy nesmíte být poslední dvakrát po sobě - Iacocca

 

Provoz zaštiťuje spolek OpenAlt.