Immer wenn ich mich bei meiner ec2 Ubuntu-Instanz anmelde, sieht mein Terminal so aus
(base) ubuntu@ip-xx-xx-xx
Wenn ich mein Python-Skript ausführe, das aus einem Jupyter-Notebook mit der Standard-Conda-Umgebung konvertiert wurde, läuft das Skript perfekt. Das Problem beginnt, wenn ich versuche, einen Cronjob auszuführen.
Wenn die Instanz startet (ich werde versuchen, es so gut wie möglich zu erklären), kann das ipython, das das Skript ausführt, die Pakete nicht finden. Weil es die Standard-Conda-Umgebung ist. Ich dachte, ich muss nur irgendwie die Quell-Bash aktivieren, aber alles ist fehlgeschlagen. Was ich bisher versucht habe
- Ich habe versucht, Bash auszuführen
- Ich habe versucht, SHELL die Bash hinzuzufügen
- Ich habe versucht, Bash als Quelle zu verwenden
- Ich habe versucht, ipython direkt aus der Conda-Umgebung auszuführen
An diesem Punkt weiß ich nicht, was mir fehlt. Ich möchte nur, dass beim Starten der Instanz die Conda-Umgebung „aktiviert“ wird und das Skript mit ipython ausgeführt wird.
Antwort1
Ich würde vermuten, dass die virtuelle Umgebung in aktiviert wird .profile
, was keine Auswirkungen auf Cron hat.
Ich würde vorschlagen, das Venv in der Crontab-Zeile zu aktivieren:
SHELL=/bin/bash
[crontab stuff] . /path/to/the/virtualenv/bin/activate && your.py
Die Einstellung SHELL=/bin/bash ist nicht unbedingt erforderlich, bringt Sie aber näher an die „übliche“ Umgebung heran. Legen Sie bei Bedarf auch den Pfad fest, wechseln Sie in das richtige Verzeichnis usw.
Eine gute Testmethode besteht darin, Folgendes zu versuchen: ssh you@yourserver 'the command above'
Wenn der Fehler nicht angezeigt wird, versuchen Sie es mit einem Anhängen &>/tmp/debug.log
an den Crontab-Befehl.
Wenn Sie nicht sicher sind, wie der Virtualenv-Pfad lautet, versuchen Sie: type activate
( echo $PATH
, print(sys.path)
, usw.)
Mehr Info:https://stackoverflow.com/questions/3287038/cron-and-virtualenv#answer-7031758