Uma solução simples seria:
ping -W 1 $ip
em que -W
especifica um tempo limite em segundos.
Certifique-se de que ele seja um maiúscula W. Você também pode usar -i
para especificar um tempo de espera em segundos.
Estou testando a estabilidade de uma máquina e preciso simplesmente escrever um script Bash para determinar se um host está online ou não. Como eu poderia roteirizar isso?
if [ ! $(hostisonline) ]; then
# profit
fi
Se o host responder ao ping, teste se estiver online (apenas um exemplo):
ping -c 10 $host
Se os pings não forem retornados / proibidos, eu verificaria serviços individuais por meio do nmap:
nmap $host -p $known_port --max-retries 10 | grep -q open
Por exemplo, para testar se o ssh deve ser aberto, substitua known_port por 22
como para o script poderia ser (o exemplo - é domingo de manhã e estou entediado por isso cresceu um pouco depois de algumas edições - é destinado a testar um monte de hosts, não apenas um):
declare -A SERVER
# SERVER["NAME - Description"]="IP KNOWNPORT"
SERVER["SERVER1 - Client foo"]="111.111.111.111 22"
SERVER["SERVER2 - Client bar"]="222.222.222.222 80"
# ...
# add as many server/port combinations as you'd like
NMAP_MAX_RETRIES=10
printf "========================= ========================= ========== ==========\n"
printf "%25s %25s %10s %10s\n" "Host Description" "IP" "Port" "Status"
printf "========================= ========================= ========== ==========\n"
for server in "${!SERVER[@]}"; do
set -- ${SERVER["$server"]}
eval nmap \ -p \ --max-retries $NMAP_MAX_RETRIES | grep -q open
if [ "$?" == "0" ]; then
STATUS="[OK]"
else
STATUS="*DOWN*"
fi
printf "%25s %25s %10s %10s\n" "$server" "$1" "$2" "$STATUS"
done
printf "========================= ========================= ========== ==========\n"
Quando executado, retorna (ips falsos, então os servidores estão inativos):
~$ bash /tmp/foo.sh
========================= ========================= ========== ==========
Host Description IP Port Status
========================= ========================= ========== ==========
SERVER2 - Client bar 222.222.222.222 80 *DOWN*
SERVER1 - Client foo 111.111.111.111 22 *DOWN*
========================= ========================= ========== ==========
Tags networking bash scripting