Comment savoir si httpd fonctionne ou pas via la command line?

Je travaille sur un petit panneau de contrôle pour mon server. J'ai besoin d'une command qui dira si httpd est en cours d'exécution ou arrêté.

Va probablement utiliser le même code pour d'autres services aussi.

La plupart des gens exécutent leur httpd (Apache, Nginx, etc) via un système d'initialisation. C'est presque certainement le cas si vous avez installé à partir d'un package. Presque tous ces systèmes d'init ont une méthode de travail qui fonctionne si elle fonctionne. Dans mon cas, j'utilise nginx qui envoie un script d'initialisation de style SysV et qui accepte un argument de status , comme ceci:

 $ /etc/init.d/nginx status * nginx is running 

Évidemment, si vous utilisez un système httpd, script ou init différent, vous allez avoir une syntaxe légèrement différente, mais à less que vous ne lanciez manuellement le httpd vous-même (qui se sent comme la pire idée au monde), vous êtes probablement en utilisant un joli script de démarrage géré qui vous permettra d'interroger le statut.

La réponse de slm a plus à propos de ce type de requête init, mais le problème avec la confiance est qu'il ne vous indique réellement qu'un process est toujours en cours d'exécution. 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 de passer des tests init simples et de passer à des tests comportementaux.

Une chose que nous soaps sur les httpds est qu'ils écoutent. Habituellement sur le port *:80 , mais si le vôtre ne le fait pas, vous pouvez adapter le code suivant. Ici, je ne fais awk 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 process est 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 comment 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- le.

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

Je regarde juste le code de réponse (200 signifie "A-Ok!"), Mais encore une fois, nous pourrions creuser et effectivement tester la sortie pour s'assurer qu'elle est générée correctement.

Mais même cela n'est pas si approfondi. Vous vérifiez localhost et il rapporte 200, rien ne va? Et si les castors mâchouillaient le câble réseau qui fournit le httpd (mais pas le rest du système)? Alors quoi? Vous indiquez la disponibilité lorsque vous êtes en panne. Peu de choses semblent plus professionnelles que des données d'état incorrectes.

Parlons donc d'un server externe (idéalement sur une connection complètement différente, dans une autre galaxie très lointaine) et demandons-lui d'interroger notre server:

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

À ce stade, tous les problèmes signalés sont des problèmes in-app (qui peuvent avoir leur propre erreur -handling et -reporting, ou ils sont à la fin du client).

Une combinaison de ces tests peut aider à déterminer où en est le problème.

Vous pouvez utiliser la command de services universellement sur la plupart des dissortingbutions Linux.

 $ service <service> status 

Exemple

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

Cette même command peut être utilisée pour tous les services qui s'exécutent sur une base individuelle ou pour find le statut 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 methods de SysVinit, Systemd et Upstart pour les services de listage

Si vous utilisez l'un des frameworks de gestion de services les plus courants, vous pouvez utiliser les methods suivantes pour répertorier les services à l'intérieur de chaque.

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 

Parvenu

 $ 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 

Les references

  • SysVinit to Systemd Cheatsheet
  • Commande pour répertorier les services qui démarrent au démarrage?