Hallo zusammen,

ich habe ein Python-Skript, welches ich über einen Systemd-Dienst beim Bootvorgang starten möchte. Das Python-Skript soll dabei mit pipenv aufgerufen werden und über sdnotify eine Rückmeldung über den erfolgreichen Start an Systemd geben.

Aufruf des Skriptes im Service:
ExecStart=/usr/bin/fish -c 'cd /pfad/zum/skript && /usr/bin/pipenv run python mein_skript.py'

Im Python-Skript kommt dann:
systemd_info = sdnotify.SystemdNotifier()
systemd_info.notify("READY=1")

Das führt aber zu folgender Fehlermeldung beim Start des Services:
systemd[1]: mein_skript.service: Got notification message from PID 15835, but reception only permitted for main PID 15833

Vermutlich hängt das damit zusammen, daß der Hauptprozeß der von pipenv ist, und das Python-Skript daher mit der falschen PID Nachrichten sendet.

Gibt es hierfür eine schöne Lösungsmöglichkeit?

Du musst statt pipenv den Pfad zum Python Interpreter im Virtualenv angeben. Z. B.

ExecStart=/Pfad/zum/venv/bin/python /Pfad/zum/Skript.py

Ich würde auch den Pfad vorher nicht wechseln und die Shell ganz aus dem Prozess rauslassen.

Viele Grüße
Whitie

Ohhh, das ist natürlich viel besser als der Umweg über die Shell.

Vielen Dank!!