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.