GNU/Linux >> Tutoriales Linux >  >> Linux

trabajo cron para ejecutar en el entorno virtual conda

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.


Linux
  1. Cómo ejecutar un trabajo cron cada hora y 10 minutos

  2. Cómo ejecutar un trabajo cron dentro de un contenedor docker

  3. ¿Por qué no se ejecuta mi trabajo cron.d por minuto?

  4. ¿Puedo ejecutar un trabajo cron con más frecuencia que cada minuto?

  5. ¿Cómo ejecutar cron job cada 3 meses?

Cree un entorno virtual para diferentes versiones de Python usando Conda

Cómo ejecutar un trabajo cron en días específicos de la semana

Cómo configurar y ejecutar un cron en cPanel

¿Cómo puedo hacer que un trabajo cron se ejecute cada 30 minutos?

No ejecute el trabajo cron si ya se está ejecutando

¿Cómo ejecutar el trabajo cron en una hora específica todos los días?