Estoy trabajando en un pequeño panel de control para mi servidor. Necesito un comando que diga si se httpd
está ejecutando o detenido.
Probablemente también usará el mismo código para otros servicios.
La mayoría de las personas ejecuta su httpd (Apache, Nginx, etc.) a través de un sistema init. Es casi seguro el caso si lo ha instalado desde un paquete. Casi todos estos sistemas init tienen un método que funciona si se está ejecutando. En mi caso, estoy usando nginx que envía un script de inicio de estilo SysV y que acepta un status
argumento, así:
$ /etc/init.d/nginx status
* nginx is running
Obviamente, si está ejecutando un sistema httpd, script o init diferente, tendrá una sintaxis ligeramente diferente, pero a menos que esté iniciando manualmente el httpd usted mismo (que se siente como la peor idea del mundo), está probablemente utilizando un script de inicio agradable y administrado que le permitirá consultar el estado.
La respuesta de slm tiene más información sobre este tipo de consulta de inicio, pero el problema con la confianza es que realmente solo te dice si un proceso aún se está ejecutando. El proceso principal de su httpd podría estar ejecutándose, pero de alguna manera bloqueado. Tiene mucho sentido omitir las pruebas de inicio simples y pasar a las pruebas de comportamiento.
Una cosa que sabemos sobre httpds es que escuchan. Por lo general, en el puerto *:80
, pero si el suyo no lo hace, puede adaptar el código siguiendo el código. Aquí solo estoy awk
mostrando la salida netstat
para ver si está escuchando en el puerto correcto.
$ sudo netstat -ntlp | awk '$4=="0.0.0.0:80"'
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2079/nginx
También podríamos verificar qué proceso se está ejecutando también para asegurarnos de que se está ejecutando el httpd correcto . Podríamos hacer todo tipo de controles. Depende de lo paranoico que quieras ser :)
Pero incluso eso es solo un reflejo de un httpd. ¿Quieres probarlo realmente? Bueno, probémoslo .
$ wget --spider -S "http://localhost" 2>&1 | awk '/HTTP\// {print $2}'
200
Solo estoy mirando el código de respuesta (200 significa "¡A-Okay!") Pero nuevamente, podríamos profundizar y probar la salida para asegurarnos de que se genere correctamente.
Pero incluso esto no es tan completo. Estás revisando localhost
y está reportando 200, ¿no pasa nada? ¿Qué sucede si los castores muerden el cable de red que suministra el httpd (pero no el resto del sistema)? ¡¿Y que?! Estás informando el tiempo de actividad cuando realmente estás inactivo. Pocas cosas parecen menos profesionales que los datos de estado incorrectos.
Entonces hablemos con un servidor externo (idealmente en una conexión completamente diferente, en otra galaxia muy, muy lejana) y solicitemos que consulte a nuestro servidor:
$ ssh tank 'wget --spider -S "http://bert" 2>&1' | awk '/HTTP\// {print $2}'
200
En este punto, cualquier problema que se haya informado son problemas en la aplicación (que pueden tener su propio manejo y notificación de errores, o están al final del cliente).
Una combinación de estas pruebas puede ayudar a determinar dónde está el problema.
Puede usar el comando de servicios universalmente en la mayoría de las distribuciones de Linux.
Ejemplo
Este mismo comando se puede utilizar para todos los servicios que se ejecutan de forma individual o para encontrar el estado de todos los servicios.
Los diversos métodos dentro de SysVinit, Systemd y Upstart para listar servicios
Si está utilizando uno de los marcos de gestión de servicios más típicos, puede utilizar los siguientes métodos para enumerar los servicios dentro de cada uno.
SysVinit
Systemd
Advenedizo
Referencias
fuente