Mit Python einen service status abfragen

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
Benutzeravatar
HightronicDesign
User
Beiträge: 9
Registriert: Freitag 20. Februar 2015, 00:41

Hallo Leute,

wie kann man mit einem Python Script einen Service status abfragen ?

Beispiel: Ich möchte wissen ob hostapd aktiv oder inaktiv ist.


Vielen Dank
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Nach einer API suchen, die dir den Status zurück gibt (ich glaube systemd hat ein dbus-Interface), falls es keine API gibt kann man auch mit `subprocess` ein externes Programm (z.B. systemctl) starten und das Ergebnis auswerten.
the more they change the more they stay the same
BlackJack

@HightronicDesign: Wie Dav1d schrieb hat `systemd` eine DBus-API. Es gibt mit `python-systemd` eine API die darauf aufbaut.

Code: Alles auswählen

#!/usr/bin/env python
# coding: utf8
from __future__ import absolute_import, division, print_function
from systemd.manager import Manager


def main():
    manager = Manager()
    unit = manager.get_unit('mediacenter.service')
    is_active = unit.properties.ActiveState == 'active'
    print(is_active)


if __name__ == '__main__':
    main()
Anstelle des `mediacenter.service` mit dem ich das auf meinem OSMC-Raspi getestet habe, müsstest Du da den Service-Namen eintragen den Du testen möchtest.
Benutzeravatar
HightronicDesign
User
Beiträge: 9
Registriert: Freitag 20. Februar 2015, 00:41

Hmm verstehe.

Ich habe es gestern noch spontan mit der abfrage von systemctl gemacht.

Allerdings frage ich momentan den status in einer while1 loop ab weil ich ein event starten stoppen möchte je nach status, was ich noch nicht auf performance geprüft habe.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

HightronicDesign hat geschrieben:Allerdings frage ich momentan den status in einer while1 loop ab weil ich ein event starten stoppen möchte je nach status, was ich noch nicht auf performance geprüft habe.
Das klingt alles andere als elegant. Bietet Systemd nichts an um über einen gestarteten Service informiert zu werden?
Benutzeravatar
HightronicDesign
User
Beiträge: 9
Registriert: Freitag 20. Februar 2015, 00:41

Über den technischen Hintergrund von systemd hab ich noch nicht viel gesucht, daher kann ich selbst fürs erste nicht sagen ob sich in dieser Richtung irgendwas anbietet.
Antworten