GNU/Linux >> Tutoriels Linux >  >> Linux

tâche cron à exécuter sous l'environnement virtuel conda

A publié une solution de travail (sur Ubuntu 18.04) avec un raisonnement détaillé sur SO.

La forme courte est :

1. Copier l'extrait ajouté par Anaconda dans ~/.bashrc (en fin de fichier) dans un fichier séparé ~/.bashrc_conda

À partir de l'installation d'Anaconda 2020.02, l'extrait se lit comme suit :

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

Assurez-vous que :

  • Le chemin /home/USERNAME/anaconda3/ est correct.
  • L'utilisateur qui exécute la tâche cron dispose de autorisations de lecture pour ~/.bashrc_conda (et aucun autre utilisateur ne peut écrire dans ce fichier).

2. En crontab -e ajouter des lignes pour exécuter des cronjobs sur bash et à la source ~/.bashrc_conda

Exécutez crontab -e et insérez ce qui suit avant le cronjob :

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

3. En crontab -e inclure au début du cronjob conda activate my_env; comme dans l'exemple

Exemple d'entrée pour un script qui s'exécuterait à midi 12h30 chaque jour sur l'interpréteur Python dans l'environnement conda :

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

Et c'est tout.

Vous voudrez peut-être vérifier de temps en temps que l'extrait dans ~/.bashrc_conda est à jour au cas où conda met à jour son extrait dans ~/.bashrc .


Réponse trouvée sur stack over flow :

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

La solution consiste à référencer l'exécutable python dans l'environnement virtuel lui-même. Dans mon cas, j'ai modifié le fichier bash pour exécuter cet exécutable :

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


C'est une solution qui a bien fonctionné pour moi.

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

J'utilise miniconda avec Conda version 4.7.12 sur un Ubuntu 18.04.3 LTS.

Je suis capable de placer ce qui précède dans un script et de l'exécuter également via crontab sans aucun problème.


Linux
  1. Comment mettre en place une tâche cron pour lancer un exécutable toutes les heures ?

  2. Tester une tâche cron hebdomadaire

  3. Linux :exécuter la tâche cron au premier plan

  4. Comment exécuter une tâche cron dans un conteneur docker

  5. Pourquoi ma tâche cron.d par minute ne s'exécute-t-elle pas ?

Comment créer un environnement virtuel Rust à l'aide de Conda sous Linux

Créer un environnement virtuel pour différentes versions de Python à l'aide de Conda

Cron Job pour vérifier si le script Php est en cours d'exécution, sinon, exécutez-le ?

Comment configurer et exécuter un Cron dans cPanel

Comment puis-je exécuter une tâche cron toutes les 30 minutes ?

Comment exécuter une tâche cron à une heure précise chaque jour ?