GNU/Linux >> Znalost Linux >  >> Linux

úloha cron pro spuštění ve virtuálním prostředí conda

Zveřejnil pracovní řešení (na Ubuntu 18.04) s podrobným odůvodněním SO.

Krátká forma je:

1. Zkopírujte úryvek připojený Anacondou v ~/.bashrc (na konci souboru) do samostatného souboru ~/.bashrc_conda

Od instalace Anaconda 2020.02 zní úryvek takto:

# >>> 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 <<<

Ujistěte se, že:

  • Cesta /home/USERNAME/anaconda3/ je správně.
  • Uživatel spouštějící cronjob má oprávnění ke čtení pro ~/.bashrc_conda (a žádný jiný uživatel nemůže do tohoto souboru zapisovat).

2. V crontab -e přidejte řádky ke spuštění cronjobů na bash a do zdroje ~/.bashrc_conda

Spusťte crontab -e a vložte následující před cronjob :

SHELL=/bin/bash
BASH_ENV=~/.bashrc_conda

3. V crontab -e zahrnout na začátek cronjob conda activate my_env; jako v příkladu

Příklad záznamu pro skript, který by se spouštěl každý den v poledne ve 12:30 na interpretu Pythonu v prostředí conda:

30 12 * * * conda activate my_env; python /path/to/script.py; conda deactivate

A je to.

Možná budete chtít čas od času zkontrolovat, zda je fragment v ~/.bashrc_conda je aktuální pro případ, že conda aktualizuje svůj fragment v ~/.bashrc .


Nalezena odpověď na zásobníku přes tok:

https://stackoverflow.com/questions/3287038/cron-and-virtualenv

Řešením je odkazovat na spustitelný soubor pythonu v samotném virtuálním prostředí. V mém případě jsem změnil soubor bash, aby spouštěl tento spustitelný soubor:

/home/etlservice/anaconda3/envs/sql_server_etl/bin/python


Toto je řešení, které se mi osvědčilo.

source /root/miniconda3/etc/profile.d/conda.sh && \
conda activate <your_env> && \
python <your_application> &

Používám minicondu s Conda verze 4.7.12 na Ubuntu 18.04.3 LTS.

Výše uvedené jsem schopen umístit do skriptu a spustit jej také přes crontab bez jakýchkoli problémů.


Linux
  1. Jak spustit úlohu cron každou hodinu a 10 minut

  2. Jak spustit úlohu cron uvnitř kontejneru dockeru

  3. Proč moje úloha cron.d za minutu neběží?

  1. Mohu spouštět úlohu cronu častěji než každou minutu?

  2. jak spustit cron job každé 3 měsíce?

  3. Jak spustit úlohu cronu každý den v určitou hodinu?

  1. Jak vytvořit virtuální prostředí Rust pomocí Conda na Linuxu

  2. Vytvořte virtuální prostředí pro různé verze Pythonu pomocí Conda

  3. Úloha Cron zkontrolovat, zda skript PHP běží, pokud ne, pak spustit?