Ich habe ein Python-Skript, das ich normalerweise mit diesem Befehl ausführe:
(environment) python run.py
Ich möchte dieses Skript beim Start ausführen. (Ich benutze Ubuntu) Hier ist mein Service:
[Unit]
Description=My Script Service
After=multi-user.target
[Service]
Type=idle
ExecStart=/home/user/anaconda3/bin/python /home/user/space/run.py
[Install]
WantedBy=multi-user.target
Übrigens konnte ich dieses Skript nicht ausführen, aber ich konnte jedes Skript ausführen, das sich nicht in der Umgebung befindet. Wie kann ich beim Start ein Python-Skript ausführen (virtualenv)?
sudo systemctl status user_sent
● user_sent.service - Mail Service
Loaded: loaded (/lib/systemd/system/user_sent.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since xxxxx 16:30:20 MSK; 3s ago
Process: 3713 ExecStart=/usr/bin/python run.py (code=exited, status=200/CHDIR)
Main PID: 3713 (code=exited, status=200/CHDIR)
python
systemd
daemon
virtualenv
Jasmin
quelle
quelle
/usr/bin/python run.py
siehe stackoverflow.com/questions/37211115/… und unix.stackexchange.com/questions/278188/…/path/to/your/virtualenv/bin/python
Antworten:
Ihre Gerätedatei ist korrekt. Wenn Sie eine Python-Datei unter einem venv ausführen möchten, müssen Sie nur auf die Python-Binärdatei im venv- Verzeichnis verweisen, wie Sie es getan haben
/home/user/anaconda3/bin/python
Was auffällt, ist der Grund, warum Ihr Gerät ausfällt :
code=exited, status=200/CHDIR
. Dies weist höchstwahrscheinlich auf ein Problem in Ihrem Skript hin.Wenn Sie das debuggen möchten, gehen Sie wie folgt vor:
ExecStart=
genau so unter root aus, um festzustellen, ob das Problem durch Ihr Skript verursacht wird.journalctl -u <unit_name>
. Das sollte Ihnen weitere Informationen zu Problemen mit Ihrem Gerät geben.Post Scriptum
Beide der folgenden
[Service]
Optionen funktionieren:oder
Der einzige Unterschied besteht darin, dass relative Aufrufe in Ihrem Skript aus verschiedenen Verzeichnissen ausgeführt werden. Wenn Ihr Skript also eine Zeile enthält
open("my_file", "w")
, wird im ersten Beispiel eine Datei/my_file
und im zweiten eine Datei erstellt/home/user/space/my_file
.quelle