GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo saber si httpd se está ejecutando o no a través de la línea de comandos?

La mayoría de las personas ejecutan su httpd (Apache, Nginx, etc.) a través de un sistema de inicio. Es casi seguro que ese es el caso si ha instalado desde un paquete. Casi todos estos sistemas de inicio 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 usando una buena secuencia de comandos de inicio administrada 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 de confiar en eso es que realmente solo le dice si un proceso aún se está ejecutando. El proceso principal de su httpd podría estar corriendo pero de alguna manera estancado. 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. Normalmente en el puerto *:80 , pero si el tuyo no lo hace, puedes adaptar el código siguiendo el código. Aquí solo soy awk ing la salida de 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 comprobar cuál el proceso también se está ejecutando para asegurarse de que correcto httpd se está ejecutando. Podríamos hacer todo tipo de comprobaciones. Depende de lo paranoico que quieras ser :)

Pero incluso eso es solo un reflejo de un archivo httpd. ¿Quieres probarlo de verdad? Bueno, vamos a probar eso.

$ wget --spider -S "http://localhost" 2>&1 | awk '/HTTP\// {print $2}'
200

Solo estoy mirando el código de respuesta (200 significa "¡A-Está bien!") pero nuevamente, podríamos profundizar y probar la salida para asegurarnos de que se genera correctamente.

Pero incluso esto no es tan completo. Estás marcando localhost y está reportando 200, ¿no pasa nada? ¿Qué pasaría si los castores masticaran el cable de red que alimenta el httpd (pero no el resto del sistema)? ¡¿Y que?! Está informando sobre el tiempo de actividad cuando en realidad está inactivo. Pocas cosas se ven menos profesionales que los datos de estado incorrectos.

Así que hablemos con un servidor externo (idealmente en una conexión completamente diferente, en otra galaxia muy, muy lejana) y pídale que consulte nuestro servidor:

$ ssh tank 'wget --spider -S "http://bert" 2>&1' | awk '/HTTP\// {print $2}'
200

En este punto, todos los problemas informados son problemas en la aplicación (que pueden tener su propio manejo e informe de errores, o están en el extremo del cliente).

Una combinación de estas pruebas también 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.

$ service <service> status

Ejemplo

$ service httpd status
httpd (pid  23569) is running...

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.

$ service --status-all
python is stopped
automount (pid 22457) is running...
Avahi daemon is not running
Avahi DNS daemon is not running
crond (pid  23577) is running...
gpm is stopped
hald is stopped
httpd (pid  23569) is running...
...

Los diversos métodos dentro de SysVinit, Systemd y Upstart para enumerar servicios

Si está utilizando uno de los marcos de administración de servicios más típicos, puede usar los siguientes métodos para enumerar los servicios dentro de cada uno.

SysVinit

$  ls -l /etc/init.d/ | head -10
total 220
-rwxr-xr-x 1 root root  1422 Jan 13  2009 ajaxterm
-rwxr-xr-x 1 root root  3052 Apr 20  2012 autofs
-rwxr-xr-x 1 root root  1877 Apr 13  2011 avahi-daemon
-rwxr-xr-x 1 root root  1824 Apr 13  2011 avahi-dnsconfd
-rwxr-xr-x 1 root root  1926 Feb 22  2012 crond
-rwxr-xr-x 1 root root 14291 Dec 19  2011 functions
-rwxr-xr-x 1 root root  1778 Jan  6  2007 gpm
-rwxr-xr-x 1 root root  1586 Mar  5  2011 haldaemon
-rwxr-xr-x 1 root root  5742 Dec 19  2011 halt

Systemd

$ systemctl list-unit-files --type=service | head -10
UNIT FILE                                   STATE   
abrt-ccpp.service                           enabled 
abrt-oops.service                           enabled 
abrt-pstoreoops.service                     disabled
abrt-vmcore.service                         enabled 
abrt-xorg.service                           enabled 
abrtd.service                               enabled 
accounts-daemon.service                     enabled 
alsa-restore.service                        static  
alsa-state.service                          static  

Advenedizo

$ initctl list | head -10
avahi-daemon start/running, process 1090
mountall-net stop/waiting
nmbd start/running, process 2045
passwd stop/waiting
rc stop/waiting
rsyslog start/running, process 1088
tty4 start/running, process 1211
udev start/running, process 483
upstart-udev-bridge start/running, process 480
ureadahead-other stop/waiting

Referencias

  • Hoja de trucos de SysVinit a Systemd
  • ¿Comando para enumerar los servicios que se inician al iniciar?

Linux
  1. ¿Qué versión de Linux estoy ejecutando? Aquí está cómo averiguarlo

  2. Cómo averiguar qué hace un comando de Linux

  3. Linux:¿cómo averiguar la familia de arquitectura Intel desde la línea de comandos?

  4. ¿Cómo matar la línea de comando de Chromium sobre Ssh?

  5. ¿Cómo puedo saber qué versión de Linux estoy ejecutando?

Cómo averiguar la dirección IP pública desde la línea de comandos en Linux

Cómo saber cuánto tiempo ha estado ejecutándose un proceso en Linux

Cómo encontrar información de la CPU en Linux usando la línea de comandos

Cómo encontrar la dirección IP en la línea de comandos de Linux

Cómo:Linux General - IPTables básicos a través de la línea de comandos

¿Cómo averiguar los principales directorios o archivos que consumen espacio?