La plupart des gens exécutent leur httpd (Apache, Nginx, etc.) via un système init. C'est presque certainement le cas si vous avez installé à partir d'un package. Presque tous ces systèmes d'initialisation ont une méthode qui fonctionne pour savoir s'il est en cours d'exécution. Dans mon cas, j'utilise nginx qui fournit un script d'initialisation de style SysV et qui accepte un status
argument, comme ceci :
$ /etc/init.d/nginx status
* nginx is running
Évidemment, si vous exécutez un système httpd, script ou init différent, vous allez avoir une syntaxe légèrement différente, mais à moins que vous ne lanciez manuellement le httpd vous-même (ce qui semble être la pire idée du monde), vous êtes en utilisant probablement un joli script de démarrage géré qui vous permettra d'interroger le statut.
La réponse de slm en dit plus sur ce type d'interrogation d'initialisation, mais le problème de la confiance, c'est qu'elle ne vous dit vraiment que si un processus est toujours en cours d'exécution. Le processus principal de votre httpd pourrait être en cours d'exécution, mais d'une certaine manière dans l'impasse. Il est tout à fait logique d'ignorer les tests d'initialisation simples et de passer aux tests comportementaux.
Une chose que nous savons à propos des httpds, c'est qu'ils écoutent. Généralement sur le port *:80
, mais si ce n'est pas le cas, vous pouvez adapter le code suivant le code. Ici, je n'ai que awk
ing la sortie de netstat
pour voir s'il écoute sur le bon port.
$ 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
Nous pourrions également vérifier quel le processus est également en cours d'exécution pour s'assurer que le bon httpd est en cours d'exécution. Nous pourrions faire toutes sortes de vérifications. Ça dépend à quel point tu veux être paranoïaque :)
Mais même cela n'est que le reflet d'un httpd. Vous voulez vraiment le tester ? Eh bien, testons il.
$ wget --spider -S "http://localhost" 2>&1 | awk '/HTTP\// {print $2}'
200
Je regarde juste le code de réponse (200 signifie "A-Okay !"), mais encore une fois, nous pourrions creuser et tester la sortie pour nous assurer qu'elle est générée correctement.
Mais même ce n'est pas si approfondi. Vous vérifiez localhost
et ça rapporte 200, rien de mal? Et si les castors rongeaient le câble réseau qui alimente le httpd (mais pas le reste du système) ? Alors quoi ?! Vous signalez la disponibilité alors que vous êtes réellement en panne. Peu de choses semblent moins professionnelles que des données de statut incorrectes.
Parlons donc à un serveur externe (idéalement sur une connexion complètement différente, dans une autre galaxie très, très lointaine) et demandons-lui d'interroger notre serveur :
$ ssh tank 'wget --spider -S "http://bert" 2>&1' | awk '/HTTP\// {print $2}'
200
À ce stade, tous les problèmes signalés sont soit des problèmes internes à l'application (qui peuvent avoir leur propre traitement et signalement des erreurs, soit ils se trouvent du côté du client).
Une combinaison de ces tests peut également aider à déterminer où se situe le problème.
Vous pouvez utiliser la commande services de manière universelle sur la plupart des distributions Linux.
$ service <service> status
Exemple
$ service httpd status
httpd (pid 23569) is running...
Cette même commande peut être utilisée pour tous les services qui s'exécutent individuellement ou pour trouver l'état de tous les services.
$ 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...
...
Les différentes méthodes de SysVinit, Systemd et Upstart pour répertorier les services
Si vous utilisez l'un des frameworks de gestion de services les plus courants, vous pouvez utiliser les méthodes suivantes pour répertorier les services au sein de chacun.
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
Parfait
$ 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
Références
- Cheatsheet de SysVinit à Systemd
- Commande pour répertorier les services qui démarrent au démarrage ?