GNU/Linux >> Linux Esercitazione >  >> Linux

cron job da eseguire nell'ambiente virtuale conda

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.


Linux
  1. Crea un ambiente virtuale per diverse versioni di Python usando Conda

  2. Esegui cron job solo se non è già in esecuzione

  3. Linux:esegui cron job in primo piano

  4. Come eseguire un cron job all'interno di un contenitore docker

  5. Non eseguire cron job se già in esecuzione

Come creare un ambiente virtuale Rust usando Conda su Linux

Cron Job per verificare se lo script PHP è in esecuzione, in caso contrario eseguito?

Come eseguire un processo cron in giorni specifici della settimana

Come impostare ed eseguire un cron in cPanel

Come posso ottenere un cron job da eseguire ogni 30 minuti?

Come eseguire cron job in un'ora specifica ogni giorno?