Objetivo: verificar se um host está ativo e em funcionamento na rede,
com um método que pode ser eficientemente paralelizado em muitos hosts.
Ênfase em uma reviravolta rápida do cheque.
Razão para enfatizar a velocidade: várias verificações (às centenas) precisam ser realizadas em rápida sucessão e retornam resultados razoavelmente rápidos.
Método atual
O script atual usa um comando simples ping
. A escolha não é obrigatória, pelo contrário, qualquer ferramenta adequada com igual ou melhor confiabilidade e velocidade pode ser usada como substituto.
Script atual
Algo ao longo destas linhas:
ping -c 1 -W 100 -q "$NETWORK_HOST" &> /dev/null
Deficiência óbvia desta abordagem: as respostas são necessárias com uma mudança de sub-segundo e isso pode esperar até um segundo, a partir da experiência.
Alternativa considerada
Esqueça a velocidade da execução sequencial, execute muitos comandos ping
em paralelo usando o GNU parallel
e agrupe os resultados no final. Isso foi experimentado, mas parece ainda pior na prática.
Intuição sobre uma solução melhor
Parece que ping
may funciona muito bem como uma "verificação de integridade de pesquisa", tudo o que precisa ser ajustado é esperar muito pouco tempo e tempo limite em caso de não resposta.
Suposição: a rede é considerada confiável e RÁPIDA, os hosts não possuem necessariamente nenhuma das qualidades.
Pergunta
Como você resolveria isso? Quais ferramentas você usaria? É este o caminho certo? Você poderia fornecer um trecho de código?
- Ambiente: hosts Ubuntu X OS
- Script de script: Bash
- É possível instalar software adicional, se necessário.
- É possível compilar / instalar novo código para um aplicativo que não esteja no repositório e usá-lo.