rete up o down?

Pubblicità

corona33cl

Utente Attivo
Messaggi
190
Reazioni
1
Punteggio
38
dovrei scrivere uno script (mi cimento) e vorrei capire una buona istruzione che mi restituisce 0 se la rete è up e 1 se la rete è down...qualche volenteroso sa darmi una dritta?
Grazie
 
il comando che segue ti mostra a video:
0 se riesci ad accedere a google
un valore > 0 se ci sono problemi
Codice:
ping www.google.it -c 1 2>&1 > /dev/null; echo $?

volendo riadattando questo puoi vedere se hai accesso o meno ad internet, per testare la connettività sulla lan ti basta sostituire www.google.it con l'indirizzo ip di un host che sai essere di sicuro attivo nella tua rete locale (ad esempio il gateway).

Occhio che tutto cio' presuppone che non ci siano filtri che bloccano il traffico ICMP relativo al comando ping.
 
quindi volendo usare questa istruzione in uno script mi basta fare un


VAR='ping www.google.it -c 1 2>&1 > /dev/null; echo $?'
Giusto? Se si saresti così gentile da spiegare la sintassi?
Grazie prof. :)
 
in realtà devi usare gli apici inversi ` e non quello normale '

Codice:
VAR=`ping [URL="http://www.google.it/"]www.google.it[/URL] -c 1 2>&1 > /dev/null; echo $?`
veniamo alla sintassi dei parametri dati a ping (ping sai cose'è e anche www.google.it):
: -c 1 => solo una richiesta

2>&1 è un costrutto della shell e dice di redirigere lo standard error (2) sullo standard input (1)

> /dev/null è sintassi della shell e redirige lo standard output nel file /dev/null (in pratica nel nulla).

tutto cio' a parole:
manda un solo pacchetto ICMP di echo-reply (ping) a www.google.it, manda i messaggi di errore sull'output e manda l'output dentro /dev/null , fatto cio' mettimi a video il codice di ritorno del programma ping appena terminato.

di solito il ritorno 0 è considerato "SUCCESSO", mentre altri valori indicano problemi o condizioni particolari

echo è un comando che manda a video stringhe

$? è la variabile di shell che indica il valore di uscita del programma appena terminato
 
ottimo...ora infatti lo script che ho fatto funziona (lo mando ogni 5 minuti)...però noto nei log che subito dopo parte una mail...in pratica ogni 5 minuti partono mail per non so dove... come eliminare sto fatto?

lse vuoi posto lo script pcosì dai un'occhiata all'output dove va a finire...
 
posta pure lo script, cmq ricorda che tutto cio' che è in cron genera una mail diretta all'utente associato alle operazioni in questione (se lo script è in cron per root allora la mail andrà a root) se viene tentato l'invio a video di qualche stringa.
 
ecco lo script

#!/bin/sh
# controlla attraverso il ping se la rete è giù

VAR=`ping -c 1 sip.messagenet.it > /dev/null; echo $?`

# se var non e' uguale a zero vuol dire che la rete è down
if [ $VAR -ne 0 ]; then

if [ -f /etc/asterisk/sip_providers.conf ]; then
mv /etc/asterisk/sip_providers.conf /etc/asterisk/sip_providers.bak
/usr/sbin/asterisk -r -x "reload"
fi
else
# la rete e' attiva
if [ -f /etc/asterisk/sip_providers.conf ]; then
# la rete era attiva anche precedentente non prendiamo alcuna azione
# non eseguiamo alcuna azione
echo 1 > /dev/null

else
# la rete non era attiva precedentemente attiviamo il flag di rete
# e riattiviamo la configurazione di asterisk di default
mv /etc/asterisk/sip_providers.bak /etc/asterisk/sip_providers.conf
/usr/sbin/asterisk -r -x "reload"
fi

fi

come faccio ad evitare l'invio della mail???
Fai conto che lo mando ogni 5 minuti con un file del tipo
5 * * * * script.sh
10 * * * * script.sh
etc... fino a 59

spero di essere stato chiaro
 
eccoti la soluzione, inserisci in crontab la seguente riga (al posto delle tue N):

*/5 * * * * /bin/sh script.sh 2> /tmp/script_err > /tmp/script_log
 
inh questo modo tutto l'output va nei log giusto?
Se invece voglio che non vi sia output a nessuna parte faccio un
2> /dev/null
giusto?
 
con > redirigi l'output, con 2> redirigi gli errori , per redirigere entrambi devi usare > filename 2> filename (al posto di filename metit path e nome file del caso).

/dev/null in effetti indica "il nulla"
 
ottimo air!! Sembra funzionare bene...anche se a volte sembra come se lo script non parta..
cmq una info che mi serviva...esiste un comando di sistema che mi permette di aspettare 20 secondi senza far nulla?
Mi serve poichè nello script devo lanciare una chiamata...aspettare 20 secondi e poi lanciarla nuovamente e così via ...per 5 volte!
Grazie mille
 
ok...ghrazie mille...un'ultima cosa...vorrei fare un controllo in cui continua a ripetere una chiamata fino a che non esiste un determinato file.
Cioè io cerco di chiamare un numero...nel momento questo diventa raggiungibile viene scritto un file. Io controllo che questo file esiste e quindi smetto di chiamare.
thank 10000
 
Codice:
while [ ! -e /path_al_file/nomefile ]; 
do
   contatta_numero
   if [ condizione_vera ]; then
       touch /path_al_file/nomefile
   fi
done

ricorda solo
di mettere da qualche parte uno script che elimina tale file una volta che non ti server piu'
 
Pubblicità
Pubblicità

Discussioni Simili

Indietro
Top