GNU/Linux >> Tutoriels Linux >  >> Linux

La "bonne" façon de tester si un service s'exécute dans un script ?

Mon problème :

J'écris un script bash et j'aimerais vérifier si un service donné est en cours d'exécution.

Je sais comment faire cela manuellement, avec le statut $ service [service_name] status .

Mais (surtout depuis le passage à systemd) cela imprime tout un tas de texte un peu compliqué à analyser. J'ai supposé qu'il existe une commande conçue pour les scripts avec une sortie simple ou une valeur de retour que je peux vérifier.

Mais googler ne donne qu'une tonne de "Oh, juste ps aux | grep -v grep | grep [service_name] " résultats. Cela ne peut pas être la meilleure pratique, n'est-ce pas? Que se passe-t-il si une autre instance de cette commande est en cours d'exécution, mais qu'aucune n'a été lancée par le script d'initialisation SysV ?

Ou devrais-je simplement me taire et me salir les mains avec un peu de pgrep ?

Réponse acceptée :

systemctl a un is-active sous-commande pour ceci :

systemctl is-active --quiet service

sortira avec le statut zéro si service est actif, différent de zéro sinon, ce qui le rend idéal pour les scripts :

systemctl is-active --quiet service && echo Service is running

Si vous omettez --quiet il affichera également l'état actuel sur sa sortie standard.

Comme l'a souligné don_crissti, certaines unités peuvent être actives même si rien ne fonctionne pour fournir le service :les unités marquées comme "RemainAfterExit" sont considérées comme actives si elles se terminent avec succès, l'idée étant qu'elles fournissent un service qui n'a pas besoin d'un démon (par exemple ils configurent certains aspects du système). Les unités impliquant des démons ne seront cependant actives que si le démon est toujours en cours d'exécution.


Linux
  1. Un moyen facile de vérifier le test de vitesse SSH

  2. La meilleure façon de détecter (à partir d'un script) si un logiciel est installé ?

  3. Vérifier qu'un script est en cours d'exécution ?

  4. Vérifier les services en cours d'exécution sous Linux

  5. Quelle est la meilleure façon de s'assurer qu'une seule instance d'un script Bash est en cours d'exécution ?

Service du système d'exploitation Linux "scsi_reserve"

Comment tester un script PHP

Existe-t-il un moyen de trouver le temps d'exécution de la dernière commande exécutée dans le shell ?

N'importe quel moyen de quitter le script bash, mais sans quitter le terminal

Exécuter le script bash en tant que démon

Quel est le moyen le plus rapide d'exécuter un script ?