Saltar al contenido

Código Python para verificar si el servicio se está ejecutando o no.

No olvides que en las ciencias cualquier problema casi siempre tiene más de una soluciones, de igual modo enseñamos lo más óptimo y eficiente.

Solución:

Puede que llegue unos años tarde para responder a esta pregunta … pero he encontrado una solución fácil.

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.

Simplemente usando os.system (). Luego obtienes el código de retorno de la ejecución; 0 significa correr, 768 detenido

>>> 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

El código de retorno es el devuelto por la ejecución. Desde el Servicio página de manual:

El servicio CÓDIGOS DE SALIDA llama al script de inicio y devuelve el estado devuelto por él.

Así que depende del script de inicio ejecutado. Puedes decir con seguridad cualquier código de retorno que no sea 0 significa que el servicio no se está ejecutando.

Puedes comprobar si el proceso se está ejecutando en su lugar utilizando:

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

Respuesta un poco fuera del tema aquí (para python3).

En python3 puede usar pystemd para este propósito. Habla con systemd a través de su API dbus, por lo que es mejor que simplemente ejecutar systemctl y analizando su salida.

PD: Es mejor usar el módulo de subproceso en lugar de usar os.system ().

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *