ping diferenças de timeout entre o OS X e Linux / outros SOs

0

Essa função que escrevi deve exemplificar a idiossincrasia entre os comandos OSX e Linux ping , em particular a opção -W timeout:

# Checks if a host is up-and-running and responding to pings

function my_function_is_network_host_up() {

  local -ri N_ARGUMENTS=1
  if ! check_n_arguments "${FUNCNAME}" "${N_ARGUMENTS}" "${@}"; then return; fi

  local -r NETWORK_HOST=$1

  local -ri n_requests=1

  local -i wait_for_reply=1 # Seconds
  if [[ $my_global_os_type == 'OSX' ]]; then
    ((wait_for_reply *= 1000)) # Milliseconds
  fi

  ping -c "$n_requests" \
       -W "$wait_for_reply" \
       -q \
       "$NETWORK_HOST" \
       &> /dev/null

  return $?

}

Os sysadmins reais usam uma função Bash melhor para poder verificar os hosts independentemente da máquina em que acabaram de pular?

Meu uso típico:

hs=(...);
for h in "${hs[@]}"; do
    if my_function_is_network_host_up $h; then
        do_stuff
    fi
done

ou apenas:

my_function_is_network_host_up $h && do_stuff

Antecedentes

OSX

Time in milliseconds to wait for a reply for each packet sent.  If a reply arrives later, the packet is not printed as replied, but considered as replied when calculating statistics.

Linux

Time to wait for a response, in seconds. The option affects only timeout in absense of any responses, otherwise ping waits for two RTTs.
    
por Robottinosino 01.04.2013 / 14:39

1 resposta

2

Eu não entendo o que sua função deve fazer. Como é melhor do que simplesmente correr

for host in host1 host2 host3; do ping -c 1 host >/dev/null && do_stuff; done

Se tudo o que você quer saber é se o host está ativo ou não, e execute um comando se estiver, o acima deve ser suficiente.

    
por 01.04.2013 / 22:00

Tags