
Auf meinem Debian
Server verwende ich crontab
zum Planen eines python
Codes. Das Problem ist: Wenn ich eine Zeile wie diese hinzufüge:
6 9 * * * python /path/to/daily_task.py &> $HOME/out.txt
Wenig überraschend besagt die Ausgabe, dass der python
Befehl nicht gefunden wurde.
Natürlich kann ich einfach einen vollständigen Pfad zu einem Crontab-Eintrag wie hinzufügen /opt/python/3.9.2/bin/python
, aber diese Idee gefällt mir nicht, weil sie chaotisch aussieht und dieses Problem auch weiterhin besteht, wenn ich beispielsweise etwas wie os.system("python task.py")
in tun muss daily_task.py
.
Ich habe versucht, die Zeile wie folgt hinzuzufügen /etc/environment
:
export PATH="$PATH:/opt/python/3.9.2/bin/"
Nach einem Neustart konnte ich es zwar einfach python
in meinem Terminalfenster verwenden, aber crontab
es $PATH
besteht immer noch nur aus /usr/bin
.
Wo soll ich diesen Code einfügen, damit er überall geändert wird $PATH
, auch crontab
(ohne die Crontab-Datei zu ändern)?
Antwort1
Wenn Sie sich den Inhalt von ansehen /bin
, werden Sie viele symbolische Links sehen, da viele Programme nicht direkt in den Bin-Verzeichnissen abgelegt sind. Sie können dasselbe tun:
sudo ln -s /opt/python/3.9.2/bin/python /usr/bin
Auf diese Weise müssen Sie Ihre nicht ändern crontab
.
Antwort2
Sie können Umgebungsvariablen in Ihrer Crontab-Datei selbst wie folgt hinzufügen:
PATH=/usr/bin:/whatever/bin
HOME=/home/myuser
6 9 * * * python /path/to/daily_task.py &> $HOME/out.txt