Estoy tratando de descubrir más formas de ver si un host determinado está activo, solo usando comandos de shell (principalmente bash). Idealmente, podría funcionar con nombres de host y direcciones IP. En este momento, la única forma nativa que conozco es ping, quizás integrado en un script como se describe aquí. ¿Alguna otra idea?
fuente
answered
respuesta. El OP solicitó específicamentemore ways to see if a given host is up
, aparte de conping
, que esta respuesta no proporciona."Because of the load it can impose on the network, it is unwise to use ping during normal operations or from automated scripts."
Ping es excelente para obtener una respuesta rápida sobre si el host está conectado a la red, pero a menudo no le dirá si el host está vivo o no, o si todavía está funcionando como se esperaba. Esto se debe a que el kernel generalmente maneja las respuestas de ping, por lo que incluso si todas las aplicaciones en el sistema se han bloqueado (por ejemplo, debido a una falla de disco o falta de memoria), a menudo obtendrá respuestas de ping y puede suponer que la máquina está operando normalmente cuando la situación es todo lo contrario.
Servicios de cheques
Por lo general, no le importa si un host todavía está en línea o no, lo que realmente le importa es si la máquina todavía está realizando alguna tarea. Entonces, si puede verificar la tarea directamente, sabrá que el host está activo y que la tarea aún se está ejecutando.
Para un host remoto que ejecuta un servidor web, por ejemplo, puede hacer algo como esto:
Si ejecuta SSH y tiene claves configuradas para iniciar sesión sin contraseña, entonces tiene algunas opciones más, por ejemplo:
Esto funciona mediante SSH'ing en el host y ejecutando el
true
comando y luego cerrando la conexión. Elssh
comando solo devolverá el éxito si ese comando se puede ejecutar con éxito.Pruebas remotas a través de SSH
Puede ampliar esto para verificar procesos específicos, como asegurarse de que se
mysqld
está ejecutando en la máquina:Por supuesto, en este caso, sería mejor ejecutar algo como
monit
en el destino para garantizar que el servicio se siga ejecutando, pero es útil en scripts en los que solo desea realizar alguna tarea en la máquina A siempre que la máquina B esté lista para ello. .Esto podría ser algo así como verificar que la máquina de destino tiene un cierto sistema de archivos montado antes de realizar un trabajo
rsync
en él, de modo que no llene accidentalmente su disco principal si un sistema de archivos secundario no se montó por alguna razón. Por ejemplo, esto asegurará que/mnt/raid
esté montado en la máquina de destino antes de continuar.Servicios sin cliente
A veces no hay una manera fácil de conectarse al servicio y solo desea ver si acepta las conexiones TCP entrantes, pero cuando va
telnet
al destino en el puerto en cuestión, simplemente se queda allí y no lo desconecta, lo que significa hacerlo en una secuencia de comandos lo colgaría.Si bien no es tan limpio, todavía se puede hacer esto con la ayuda de la
timeout
ynetcat
programas. Por ejemplo, esto verifica si la máquina acepta conexiones SMB / CIFS en el puerto TCP 445, por lo que puede ver si está ejecutando el intercambio de archivos de Windows incluso si no tiene una contraseña para iniciar sesión, o si las herramientas del cliente CIFS no están ' t instalado:fuente