Je travaille sur un petit panneau de contrôle pour mon serveur. J'ai besoin d'une commande qui dira si elle httpd
est en cours d'exécution ou arrêtée.
Utilisera probablement le même code pour d'autres services également.
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 status
argument, 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 awk
que la sortie de netstat
pour 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 localhost
et ç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.
Vous pouvez utiliser la commande services universellement sur la plupart des distributions Linux.
Exemple
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.
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
Systemd
Parvenu
Les références
la source