Estou tentando descobrir mais maneiras de ver se um determinado host está ativo, usando apenas comandos do shell (principalmente o bash). Idealmente, ele seria capaz de trabalhar com nomes de host e endereços IP. No momento, a única maneira nativa que conheço é o ping, talvez integrado a um script, conforme descrito aqui. Alguma outra ideia?
fonte
answered
resposta. O PO solicitou especificamentemore ways to see if a given host is up
, além deping
, que esta resposta não fornece."Because of the load it can impose on the network, it is unwise to use ping during normal operations or from automated scripts."
O ping é ótimo para obter uma resposta rápida sobre se o host está conectado à rede, mas geralmente não informa se o host está ativo ou não ou se ainda está operando conforme o esperado. Isso ocorre porque as respostas de ping geralmente são tratadas pelo kernel; portanto, mesmo que todo aplicativo no sistema tenha travado (por exemplo, devido a uma falha no disco ou falta de memória), você ainda receberá respostas de ping e pode assumir que a máquina está funcionando. funcionando normalmente quando a situação é exatamente o oposto.
Serviços de verificação
Normalmente, você realmente não se importa se um host ainda está online ou não, o que realmente importa é se a máquina ainda está executando alguma tarefa. Portanto, se você puder verificar a tarefa diretamente, saberá que o host está ativo e que a tarefa ainda está em execução.
Para um host remoto que executa um servidor web, por exemplo, você pode fazer algo assim:
Se ele executar o SSH e você tiver as chaves configuradas para o login sem senha, você terá mais algumas opções, por exemplo:
Isso funciona fazendo SSH no host e executando o
true
comando e fechando a conexão. Ossh
comando retornará sucesso apenas se esse comando puder ser executado com sucesso.Testes remotos via SSH
Você pode estender isso para verificar processos específicos, como garantir a
mysqld
execução da máquina:Obviamente, nesse caso, seria melhor executar algo como
monit
no destino para garantir que o serviço continue sendo executado, mas é útil em scripts nos quais você deseja executar apenas algumas tarefas na máquina A, desde que a máquina B esteja pronta para isso. .Isso pode ser algo como verificar se a máquina de destino possui um determinado sistema de arquivos montado antes de executá
rsync
-lo, para que você não encha acidentalmente seu disco principal se um sistema de arquivos secundário não for montado por algum motivo. Por exemplo, isso garantirá que/mnt/raid
esteja montado na máquina de destino antes de continuar.Serviços sem cliente
Às vezes, não há uma maneira fácil de conectar-se ao serviço e você só quer ver se ele aceita conexões TCP de entrada, mas quando você chega
telnet
ao destino na porta em questão, ele fica lá e não desconecta você, o que significa fazer isso em um script faria com que ele travasse.Embora não seja tão limpo, você ainda pode fazer isso com a ajuda dos programas
timeout
enetcat
. Por exemplo, isso verifica se a máquina aceita conexões SMB / CIFS na porta TCP 445, para que você possa ver se está executando o compartilhamento de arquivos do Windows, mesmo que não tenha uma senha para efetuar login, ou as ferramentas do cliente CIFS não estão ' t instalado:fonte