GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Cron-Job zur Ausführung in der virtuellen Conda-Umgebung

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.


Linux
  1. So erstellen Sie eine virtuelle Rust-Umgebung mit Conda unter Linux

  2. Führen Sie den Cron-Job nur aus, wenn er nicht bereits ausgeführt wird

  3. Wie richte ich einen Cron-Job ein, um jede Stunde eine ausführbare Datei auszuführen?

  4. Testen Sie einen wöchentlichen Cronjob

  5. Linux:Cronjob im Vordergrund ausführen

So richten Sie einen Cron in cPanel ein und führen ihn aus

Wie würde ich einen Cron-Job dazu bringen, alle 30 Minuten ausgeführt zu werden?

Cronjob alle 1 Stunde und 10 Minuten ausführen

Warum läuft mein cron.d-Job nicht pro Minute?

Wie führe ich alle 3 Monate einen Cron-Job aus?

So konfigurieren Sie den Cron-Job so, dass er alle 2 Tage um 23:00 Uhr ausgeführt wird