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 : 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
Interaktion mit Python Systemd Service
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.
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.
-
- 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
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
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.
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.
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.