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.