Interaktion mit Python Systemd Service

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
homerunjack
User
Beiträge: 24
Registriert: Donnerstag 21. Juli 2016, 12:12

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
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

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.
homerunjack
User
Beiträge: 24
Registriert: Donnerstag 21. Juli 2016, 12:12

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
__deets__
User
Beiträge: 14536
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
nezzcarth
User
Beiträge: 1634
Registriert: Samstag 16. April 2011, 12:47

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