Pubblicata una soluzione funzionante (su Ubuntu 18.04) con un ragionamento dettagliato su SO.
La forma abbreviata è:
1. Copia lo snippet aggiunto da Anaconda in ~/.bashrc
(alla fine del file) in un file separato ~/.bashrc_conda
A partire dall'installazione di Anaconda 2020.02, lo snippet recita quanto segue:
# >>> 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 <<<
Assicurati che:
- Il percorso
/home/USERNAME/anaconda3/
è corretto. - L'utente che esegue il cronjob ha permessi di lettura per
~/.bashrc_conda
(e nessun altro utente può scrivere su questo file).
2. In crontab -e
aggiungi righe per eseguire cronjob su bash
e alla fonte ~/.bashrc_conda
Esegui crontab -e
e inserisci quanto segue prima del cronjob :
SHELL=/bin/bash
BASH_ENV=~/.bashrc_conda
3. In crontab -e
includere all'inizio del cronjob conda activate my_env;
come nell'esempio
Esempio di voce per uno script che verrebbe eseguito a mezzogiorno 12:30 ogni giorno sull'interprete Python all'interno dell'ambiente conda:
30 12 * * * conda activate my_env; python /path/to/script.py; conda deactivate
E questo è tutto.
Potresti voler controllare di tanto in tanto che lo snippet in ~/.bashrc_conda
è aggiornato nel caso in cui conda aggiorni il suo snippet in ~/.bashrc
.
Risposta trovata nello stack overflow:
https://stackoverflow.com/questions/3287038/cron-and-virtualenv
La soluzione è fare riferimento all'eseguibile Python all'interno dell'ambiente virtuale stesso. Nel mio caso, ho modificato il file bash per eseguire questo eseguibile:
/home/etlservice/anaconda3/envs/sql_server_etl/bin/python
Questa è una soluzione che ha funzionato bene per me.
source /root/miniconda3/etc/profile.d/conda.sh && \
conda activate <your_env> && \
python <your_application> &
Sto usando miniconda con Conda versione 4.7.12 su Ubuntu 18.04.3 LTS.
Sono in grado di inserire quanto sopra all'interno di uno script ed eseguirlo anche tramite crontab senza alcun problema.