Eine funktionierende Lösung (unter Ubuntu 18.04) mit detaillierter Begründung zu SO gepostet.
Die Kurzform lautet:
1. Kopieren Sie das von Anaconda in ~/.bashrc
angehängte Snippet (am Ende der Datei) in eine separate Datei ~/.bashrc_conda
Ab der Installation von Anaconda 2020.02 lautet das Snippet wie folgt:
# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/home/USERNAME/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
eval "$__conda_setup"
else
if [ -f "/home/USERNAME/anaconda3/etc/profile.d/conda.sh" ]; then
. "/home/USERNAME/anaconda3/etc/profile.d/conda.sh"
else
export PATH="/home/USERNAME/anaconda3/bin:$PATH"
fi
fi
unset __conda_setup
# <<< conda initialize <<<
Stellen Sie Folgendes sicher:
- Der Pfad
/home/USERNAME/anaconda3/
ist richtig. - Der Benutzer, der den Cronjob ausführt, hat Leseberechtigungen für
~/.bashrc_conda
(und kein anderer Benutzer kann in diese Datei schreiben).
2. In crontab -e
Zeilen hinzufügen, um Cronjobs auf bash
auszuführen und zur Quelle ~/.bashrc_conda
Führen Sie crontab -e
aus und folgendes vor dem Cronjob einfügen :
SHELL=/bin/bash
BASH_ENV=~/.bashrc_conda
3. In crontab -e
am Anfang des Cronjobs conda activate my_env;
einfügen wie im Beispiel
Beispiel eines Eintrags für ein Skript, das jeden Tag um 12:30 Uhr auf dem Python-Interpreter in der Conda-Umgebung ausgeführt wird:
30 12 * * * conda activate my_env; python /path/to/script.py; conda deactivate
Und das war's.
Vielleicht möchten Sie von Zeit zu Zeit überprüfen, ob das Snippet in ~/.bashrc_conda
ist aktuell, falls conda sein Snippet in ~/.bashrc
aktualisiert .
Antwort auf Stapelüberlauf gefunden:
https://stackoverflow.com/questions/3287038/cron-and-virtualenv
Die Lösung besteht darin, auf die ausführbare Python-Datei innerhalb der virtuellen Umgebung selbst zu verweisen. In meinem Fall habe ich die Bash-Datei geändert, um diese ausführbare Datei auszuführen:
/home/etlservice/anaconda3/envs/sql_server_etl/bin/python
Dies ist eine Lösung, die für mich gut funktioniert hat.
source /root/miniconda3/etc/profile.d/conda.sh && \
conda activate <your_env> && \
python <your_application> &
Ich verwende Miniconda mit Conda Version 4.7.12 auf einem Ubuntu 18.04.3 LTS.
Ich kann das Obige problemlos in ein Skript einfügen und es auch über Crontab ausführen.