GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Beim Ausführen des Python-Skripts über systemd kann das Modul nicht geladen werden

Fügen Sie diese Eigenschaft zu [Service] hinzu Abschnitt, um sicherzustellen, dass systemd als angegebener Benutzer ausführen.

User=pi

Siehe die Lösung von AndyD.


Die wahrscheinlichste Erklärung ist, dass Sie einige Umgebungsvariablen gesetzt haben (z. B. eine Erweiterung Ihres PYTHONPATH?), die nicht gesetzt sind, wenn das Skript von systemd ausgeführt wird.

Sie könnten versuchen, den Environment-Parameter (siehe [0]) zu verwenden, also setzen Sie PYTHONPATH (und was auch immer sonst dies beeinflussen könnte) auf das, was es in Ihrer Konsolensitzung ist.

[0] http://0pointer.de/public/systemd-man/systemd.exec.html#Environment=


systemd läuft als root. Die über pip installierten Module werden für einen Benutzer und nicht für das System installiert, und daher machte die Installation der Module ohne Root-Rechte den Zugriff auf die Module für Root unzugänglich.

Um dies zu lösen, habe ich sudo -H pip install zmq ausgeführt und sudo -H pip3 install zmq um die Pakete für Python 2.7 und Python 3+ für root zu installieren. Dies erlaubte systemd um auf die Module zuzugreifen, sobald versucht wird, das Python-Skript auszuführen.


Linux
  1. Verhindern, dass ein Bash-Skript gleichzeitig ausgeführt wird

  2. Python-Installationsfehler – Entschuldigung:UnicodeError:nicht unterstützte Escapezeichen können das Unicodedata-Modul nicht laden [Gelöst]

  3. ModuleNotFoundError:Kein Modul namens „IPython“ [Fix]

  4. Überprüfen, ob ein Skript ausgeführt wird?

  5. Shell-Skript parallel ausführen

So laden oder entladen Sie ein Linux-Kernel-Modul

So führen Sie ein Python-Skript in PHP aus

So richten Sie die automatische Ausführung eines Python-Skripts mit Systemd ein

Wie kann ich über die Befehlszeile herausfinden, ob httpd ausgeführt wird oder nicht?

Fordert den Benutzer auf, sich als Root anzumelden, wenn ein Shell-Skript ausgeführt wird

Systemd-postgresql-Startskript