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ů.