Il mio script Perl rimane bloccato con un exit status
quando si tenta di utilizzare il comando ping
.Stato di uscita del comando ping
risposta
L'utilità ping restituisce un'uscita status di zero se almeno un risposta è stato sentito dalla host specificato; uno stato di due se la trasmissione ha avuto esito positivo ma non sono state ricevute risposte ; o un altro valore (da) se si è verificato un errore .
http://www.manpagez.com/man/8/ping
I valori di ritorno effettivi possono dipendere dal sistema.
Quarto collegamento verso il basso è this in cui si afferma:
Se ping non non riceve alcuna risposta pacchetti a tutto ciò che uscirà con il codice . Se vengono specificati un conteggio e una scadenza di pacchetto e meno di contare i pacchetti vengono ricevuti al momento della scadenza, uscirà anche con il codice 1. Su , l'altro errore viene chiuso con il codice 2. Altrimenti esce con codice 0. Ciò rende possibile usare il codice di uscita per vedere se un host è vivo o no.
per elencare i risultati:
- di successo: codice 0
- Nessuna risposta: codice 1
- Altri errori: il codice 2
nota che la pagina mi lega ad dice "comando ping Linux/Unix", ma altri sistemi, o forse anche varianti di Linux e Unix, potrebbero variare questo valore.
Se possibile, testerei sul sistema in questione per assicurarmi di avere quelli giusti.
Provare man ping
dalla riga di comando. I valori di ritorno sono elencati in basso.
No, non lo sono. Ad esempio, il comando GNU ping sembra restituire 255 se non si è dato abbastanza tempo per inviare tutti i pacchetti. Questo sembra essere documentato da nessuna parte. –
Vale la pena eseguire alcuni test su questo sistema operativo. e.g su OSX
ospite risolvibile che è fino
ping -c 1 google.com ; echo $?
Risposte:
PING google.com (173.194.38.14): 56 data bytes
64 bytes from 173.194.38.14: icmp_seq=0 ttl=51 time=16.878 ms
--- google.com ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 16.878/16.878/16.878/0.000 ms
Returns
0
ospite risolvibile che è giù/non risponde al ping
ping -c 1 localhost ; echo $?
Risposte:
PING stuart-woodward.local (127.0.0.1): 56 data bytes
--- stuart-woodward.local ping statistics ---
1 packets transmitted, 0 packets received, 100.0% packet loss
Ritorni:
2
ospitanti non risolvibile
ping -c 1 sdhjfjsd ; echo $?
Risposte:
ping: cannot resolve sdhjfjsd: Unknown host
Returns:
68
connessione di successo restituirà sempre codice 0, mentre le connessioni fallite restituirà sempre codice 1 e sopra.
Per testare il tutto, provate questo frammento di
#!/bin/bash
light_red='\e[1;91m%s\e[0m\n'
light_green='\e[1;92m%s\e[0m\n'
ping -c 4 -q google.comz
if [ "$?" -eq 0 ]; then
printf "$light_green" "[ CONNECTION AVAILABLE ]"
else
printf "$light_red" "[ HOST DISCONNECTED ]"
fi
Si dovrebbe anche prendere in considerazione che se il ping ad esempio riceve una 'rete non raggiungibile' risposta ICMP, sarà contato come risposta un restituisce quindi il successo stato 0 (testato con cygwin ping su windows). Quindi non molto utile per testare se un host è vivo e IMO un bug.
Questo probabilmente appartiene a http://serverfault.com. –