Seite 1 von 1

Interaktion mit Python Systemd Service

Verfasst: Donnerstag 22. März 2018, 21:24
von homerunjack
Hallo,

nachdem ich es geschafft habe, Python Skripte über systemd als Services in Linux zu integrieren und im Hintergrund laufen zu lassen, habe ich mich gefragt, wie man mit dem Skript über die Konsole interagieren kann.

Viel suchen hat leider keinen Erfolg gebracht, daher hier die Frage :D : Gibt es eine Möglichkeit mit einem Service, welches ein Python Skript ausführt, zu interagieren?

So stelle ich mir das vor:

Neben service SKRIPTNAME start/stop/reload/restart würde ich gerne soetwas wie SKRIPTNAME -STEUERBEFEHL WERT eingeben können, wie halt bei jedem Programm das man über die Konsole steuert. Gibt es da Mittel und Wege, bzw. Stichwörter, wonach ich suchen muss?

Beste Grüße
homerunjack

Re: Interaktion mit Python Systemd Service

Verfasst: Donnerstag 22. März 2018, 21:53
von DasIch
Um dies zu tun muss die Anwendung die du als systemd Service laufen lässt eine API bereitstellen, dann kannst du ein weitere Anwendung schreiben die mit dieser API interagiert.

Es gibt viele Möglichkeiten sowas umzusetzen, alle so kompliziert dass die nicht wirklich praktikabel sind wenn du diese Frage stellen musst.

Ich würde Vorschlagen einfach eine Konfigurationsdatei zu nutzen und den Service neuzustarten, wenn du diese änderst. Das ist nicht nur viel einfacher zu implementieren, es ist auch schneller, weniger fehleranfällig und erlaubt es ggfs. problemlos mehrere Instanzen laufen zu lassen. Sofern dies als Lösung taugt, ist es also immer zu bevorzugen.

Re: Interaktion mit Python Systemd Service

Verfasst: Freitag 23. März 2018, 08:52
von homerunjack
Hi,

danke für die Antwort. Ich habe mir schon gedacht, dass es ein großer Aufwand ist.

Mein Skript (auf dem Papier) soll eine kleine Regelung werden. Und um Sollwerte zu ändern, wäre es nicht gut, dass Skript neu zu starten. Dafür läuft es ja die ganze Zeit im Hintergrund :-)


Beste Grüße
homerunjack

Re: Interaktion mit Python Systemd Service

Verfasst: Freitag 23. März 2018, 08:58
von __deets__
Du brauchst halt einen IPC Mechanismus. Unter Linux bieten sich message queues an:

http://man7.org/linux/man-pages/man7/mq_overview.7.html

Findet sich für Python zb hier https://pypi.python.org/pypi/posix_ipc

Damit kannst du robust Nachrichten zb in Form von JSON Dokumenten an deinen Service schicken.

Alternativ gehen natürlich auch DBUS oder zb nanomsg.

Re: Interaktion mit Python Systemd Service

Verfasst: Freitag 23. März 2018, 10:30
von nezzcarth
Eine recht rudimentäre Variante wäre die Verwendung von Signalen. Man könnte z.B. SIGUSR1 verwenden, um das Skript zum Neueinlesen der Konfiguration zu bringen. Allerdings muss man sich dafür dann halt mit Signal-Programmierung befassen, was halt auch nicht ganz tirival sein kann.