Comment savoir si httpd est en cours d'exécution ou non via la ligne de commande?

29

Je travaille sur un petit panneau de contrôle pour mon serveur. J'ai besoin d'une commande qui dira si elle httpdest en cours d'exécution ou arrêtée.

Utilisera probablement le même code pour d'autres services également.

user70804
la source

Réponses:

28

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 si elle est en cours d'exécution. Dans mon cas, j'utilise nginx qui expédie un script init de style SysV et qui accepte un statusargument, comme ceci:

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

Évidemment, si vous exécutez un autre httpd, script ou système d'initialisation, 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 au monde), vous êtes utilisant probablement un joli script de démarrage géré qui vous permettra d'interroger l'état.

La réponse de slm a plus sur ce type de requête init mais le problème avec la confiance est qu'il ne vous indique 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 en quelque sorte bloqué. Il est très logique d'ignorer les tests d'initialisation simples et de passer aux tests de comportement.

Une chose que nous savons sur httpds, c'est qu'ils écoutent. Habituellement sur le port *:80, mais si le vôtre ne le fait pas, vous pouvez adapter le code suivant le code. Ici, je n'utilise awkque la sortie de netstatpour voir si elle é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 processus est également en cours d'exécution pour nous assurer que le bon httpd fonctionne. Nous pourrions faire toutes sortes de vérifications. Cela dépend à quel point vous voulez ê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-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 complet. Vous vérifiez localhostet ça rapporte 200, rien de mal? Et si les castors mâchaient le câble réseau qui alimente le httpd (mais pas le reste du système)? Alors quoi?! Vous signalez une disponibilité lorsque vous êtes réellement en panne. Peu de choses semblent plus non professionnelles que des données d'état incorrectes.

Parlons donc à un serveur externe (idéalement sur une connexion complètement différente, dans une autre galaxie très loin) 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 in-app (qui peuvent avoir leur propre gestion et rapport d'erreurs, soit ils sont à la fin du client).

Une combinaison de ces tests peut également aider à déterminer où se situe le problème.

Oli
la source
3
qu'est-il arrivé à httpd?
Creek
@Creek Que voulez-vous dire?
Oli
4
+1 pour une bonne réponse, mais OP a posé des questions sur httpd et vous avez utilisé nginx
Creek
4
@Creek Dans mes livres, "httpd" signifie "démon http; un serveur Web". Pas spécifique. Que pensez-vous que je devrais faire différemment? Je ne sais pas comment je pourrais en vérifier un plus en profondeur sans avoir à lui acheter un verre au préalable.
Oli
3
Si je pouvais vous acheter un verre pour avoir dit que je le ferais, classique. Je pense que OP signifiait httpd
Creek
25

Vous pouvez utiliser la commande services universellement 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 cadres de gestion de services les plus courants, vous pouvez utiliser les méthodes suivantes pour répertorier les services dans chacun d'eux.

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 références

slm
la source
Pour autant que je sache, c'est la bonne réponse. Mais le PO avait accepté l'autre :)
Ramesh
@Ramesh - c'est OK, le Oli A est correct aussi, c'est juste un peu plus ésotérique.
slm