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?