GNU/Linux >> Belajar Linux >  >> Linux

tugas cron untuk dijalankan di bawah lingkungan virtual conda

Memposting solusi yang berfungsi (di Ubuntu 18.04) dengan alasan mendetail tentang SO.

Bentuk singkatnya adalah:

1. Salin cuplikan yang ditambahkan oleh Anaconda di ~/.bashrc (di akhir file) ke file terpisah ~/.bashrc_conda

Pada penginstalan Anaconda 2020.02, cuplikannya berbunyi sebagai berikut:

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

Pastikan bahwa:

  • Jalur /home/USERNAME/anaconda3/ benar.
  • Pengguna yang menjalankan cronjob memiliki izin baca untuk ~/.bashrc_conda (dan tidak ada pengguna lain yang dapat menulis ke file ini).

2. Di crontab -e tambahkan baris untuk menjalankan cronjobs di bash dan ke sumber ~/.bashrc_conda

Jalankan crontab -e dan masukkan berikut sebelum cronjob :

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

3. Di crontab -e sertakan di awal cronjob conda activate my_env; seperti pada contoh

Contoh entri untuk skrip yang akan dieksekusi pada siang hari pukul 12:30 setiap hari pada juru bahasa Python dalam lingkungan conda:

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

Dan hanya itu.

Anda mungkin ingin memeriksa dari waktu ke waktu bahwa cuplikan di ~/.bashrc_conda terbaru jika conda memperbarui cuplikannya di ~/.bashrc .


Menemukan jawaban di stack over flow:

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

Solusinya adalah merujuk python yang dapat dieksekusi di dalam lingkungan virtual itu sendiri. Dalam kasus saya, saya mengubah file bash untuk menjalankan executable ini:

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


Ini adalah solusi yang bekerja dengan baik untuk saya.

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

Saya menggunakan miniconda dengan Conda versi 4.7.12 di Ubuntu 18.04.3 LTS.

Saya dapat menempatkan di atas di dalam skrip dan menjalankannya melalui crontab juga tanpa masalah.


Linux
  1. Cara Membuat Lingkungan Virtual Rust Menggunakan Conda di Linux

  2. Buat lingkungan virtual untuk versi Python yang berbeda menggunakan Conda

  3. Cron Job Untuk Memeriksa Apakah Script Php Berjalan, Jika Tidak Maka Jalankan?

  1. Cara menjalankan tugas cron setiap satu jam dan 10 menit

  2. Bagaimana cara mengatur pekerjaan CRON agar berjalan setiap 10 detik di Linux?

  3. Mengapa pekerjaan cron.d per menit saya tidak berjalan?

  1. Cara mengkonfigurasi tugas cron untuk dijalankan setiap 2 hari pada pukul 11 ​​malam

  2. Jangan jalankan cron job jika sudah berjalan

  3. Bagaimana menjalankan tugas cron pada jam tertentu setiap hari?