Publicó una solución funcional (en Ubuntu 18.04) con un razonamiento detallado sobre SO.
La forma abreviada es:
1. Copie el fragmento agregado por Anaconda en ~/.bashrc
(al final del archivo) a un archivo separado ~/.bashrc_conda
A partir de la instalación de Anaconda 2020.02, el fragmento dice lo siguiente:
# >>> 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 <<<
Asegúrate de que:
- El camino
/home/USERNAME/anaconda3/
es correcto. - El usuario que ejecuta el cronjob tiene permisos de lectura para
~/.bashrc_conda
(y ningún otro usuario puede escribir en este archivo).
2. En crontab -e
agregue líneas para ejecutar cronjobs en bash
y a la fuente ~/.bashrc_conda
Ejecutar crontab -e
e inserte lo siguiente antes del cronjob :
SHELL=/bin/bash
BASH_ENV=~/.bashrc_conda
3. En crontab -e
incluir al comienzo del cronjob conda activate my_env;
como en el ejemplo
Ejemplo de entrada para un script que se ejecutaría al mediodía a las 12:30 todos los días en el intérprete de Python dentro del entorno conda:
30 12 * * * conda activate my_env; python /path/to/script.py; conda deactivate
Y eso es todo.
Es posible que desee verificar de vez en cuando que el fragmento en ~/.bashrc_conda
está actualizado en caso de que conda actualice su fragmento en ~/.bashrc
.
Respuesta encontrada en stack over flow:
https://stackoverflow.com/questions/3287038/cron-and-virtualenv
La solución es hacer referencia al ejecutable de python dentro del propio entorno virtual. En mi caso, cambié el archivo bash para ejecutar este ejecutable:
/home/etlservice/anaconda3/envs/sql_server_etl/bin/python
Esta es una solución que me ha funcionado bien.
source /root/miniconda3/etc/profile.d/conda.sh && \
conda activate <your_env> && \
python <your_application> &
Estoy usando miniconda con Conda versión 4.7.12 en Ubuntu 18.04.3 LTS.
Puedo colocar lo anterior dentro de un script y ejecutarlo a través de crontab sin ningún problema.