Ich habe eine Python-Anwendung, die ich als Systemdienst ausführen möchte. Die Anwendung läuft gut, wenn ich es manuell ausführe. Wenn ich es als Dienst starte, findet es kein lokales Modul, das mit pip install -e my_module
installiert wurde.
Der Hauptteil der Anwendung hat den folgenden Code:
%Vor%Wenn ich es manuell ausführe, bekomme ich (beachte, dass my-mod in der zweiten Zeile in 'Installierte Pakete' enthalten ist):
%Vor%Wenn Sie den Service durchlaufen, sehen die Protokolle folgendermaßen aus (Beachten Sie, dass my-mod NICHT in der zweiten Zeile von 'Installierte Pakete' enthalten ist) ::
%Vor%Dies könnte auch eine nützliche Information sein:
%Vor%Bearbeiten:
Wie Sie der Ausgabe von 'installed_packages' entnehmen können, werden alle anderen Pakete, die über die requirements.txt installiert werden, korrekt gefunden. Nur diese eine Bibliothek, für die ich Quellcode lokal habe, wird nicht gefunden, wenn ich als Dienst ausgeführt werde. (Es wird gefunden, wenn ich von der Befehlszeile aus laufe oder wenn ich import my_mod
vom Python3-Interpreter aus führe.
Ich hatte ein sehr ähnliches Problem, indem ich einen Upstart heartbeat.conf
in ein systemd heartbeat.service
umwandelte, außer mit dem requests
Modul. Die Lösung bestand darin, im neuen Dienst anzugeben, welcher Benutzer es ausführen soll:
Ohne die User=user
, kam ich in die journalctl:
Versuchen Sie zuerst Folgendes in der Python-Eingabeaufforderung.
%Vor%Fix 1
Wenn Sie die obige Art der Ausgabe erhalten, liegt die Ursache möglicherweise am Berechtigungsproblem. Gewähren Sie die Berechtigung für Site-Pakete mit den folgenden.
%Vor%Fix 2
Versuchen Sie, den PYTHONPATH wie folgt zu exportieren:
%Vor%Fix 3
Überprüfen Sie, ob mehrere Versionen von Python auf demselben Computer laufen.
Wenn ja, prüfen Sie, ob Sie am Anfang des Codes den richtigen Interpreter haben, wie #!/usr/bin/python
1) Installieren Sie das supervisor
-Paket ( ausführlichere Anweisungen hier ):
2) Erstellen Sie eine Konfigurationsdatei für Ihren Daemon unter /etc/supervisor/conf.d/my_mod.conf
:
3) Starten Sie supervisor
neu, um Ihre neue .conf
Ich hatte das gleiche Problem. Ich dachte, pip install
muss benutzerspezifisch sein.
Also wechselte ich zu root und installierte dann die Pakete. Es hat danach funktioniert.
Ich denke jedoch, dass die Angabe von User=myUser
in der Servicedatei ein geeigneterer Weg wäre, aber ich wollte, dass es mit root-Berechtigungen ausgeführt wird, und ich war mir nicht sicher, ob ich den Benutzer angeben werde.
Ich hoffe, es hilft jemandem
Wenn Sie den Dienst als root ausführen möchten, müssen Sie das Modul mit sudo: sudo pip install my_module
.
Tags und Links python python-import systemd