GNU/Linux >> Tutoriels Linux >  >> Linux

Code Python pour vérifier si le service est en cours d'exécution ou non. ?

J'ai peut-être quelques années de retard pour répondre à cette question... mais voici une solution simple que j'ai trouvée

import os  # I think it's better to use subprocess for this. but quick code for example

status = os.system('systemctl is-active --quiet service-name')
print(status)  # will return 0 for active else inactive.

Simplement en utilisant os.system(). Vous obtenez alors le code retour de l'exécution; 0 signifie courir, 768 arrêté

>>> import os
>>> stat = os.system('service sshd status')
Redirecting to /bin/systemctl status  sshd.service
● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2017-10-05 09:35:14 IDT; 29s ago
     Docs: man:sshd(8)
           man:sshd_config(5)
  Process: 620 ExecStart=/usr/sbin/sshd $OPTIONS (code=exited, status=0/SUCCESS)
 Main PID: 634 (sshd)
   CGroup: /system.slice/sshd.service
           └─634 /usr/sbin/sshd
>>> stat
0  <--  means service is running

>>> os.system('service sshd stop')
Redirecting to /bin/systemctl stop  sshd.service
0  <-- command succeeded

>>> os.system('service sshd status')
Redirecting to /bin/systemctl status  sshd.service
● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since Thu 2017-10-05 09:41:58 IDT; 10s ago
     Docs: man:sshd(8)
...
768 <-- service not running

Le code retour est celui renvoyé par l'exécution. Depuis le service page de manuel :

Le service CODES DE SORTIE appelle le script d'initialisation et renvoie l'état renvoyé par celui-ci.

C'est donc au script init exécuté. Vous pouvez dire en toute sécurité tout code de retour autre que 0 signifie que le service n'est pas en cours d'exécution.

Vous pouvez soit vérifier si le processus est en cours d'exécution à la place en utilisant :

>>> os.system('ps aux | grep sshd | grep -v grep | wc -l')
2
>>> os.system('ps aux | grep sshd123 | grep -v grep | wc -l')
0

Utilisation du sous-processus :

import subprocess

stat = subprocess.call(["systemctl", "is-active", "--quiet", "ssh"])
if(stat == 0):  # if 0 (active), print "Active"
    print("Active")

De plus, j'ai trouvé cette réponse qui explique bien pourquoi utiliser le sous-processus au lieu de os.system


Petite réponse hors sujet ici (pour python3).

En python3, vous pouvez utiliser pystemd à cette fin. Il parle avec systemd via son API dbus, donc c'est mieux que d'exécuter simplement systemctl et analyser sa sortie.

P.S.Il est préférable d'utiliser le module de sous-processus au lieu d'utiliser os.system().


Linux
  1. Conversion de votre code Python 2 en Python 3

  2. [OpenStack-Devstack] :Erreur :le service n-net ne s'exécute pas lors de l'exécution de stack.sh

  3. Vérifiez si le processus s'exécute sous Mac Os X, puis exécutez le code ?

  4. .bash_profile n'est pas fourni lors de l'exécution de Su ?

  5. service :commande introuvable

Comment vérifier la version de Python

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

Service d'exploitation Linux "sshd"

systemctl :commande introuvable

Comment vérifier si un processus est toujours en cours d'exécution en utilisant Python sous Linux ?

Le service MongoDB ne s'exécute pas dans Fedora