Masalahnya
Menjalankan skrip menggunakan layanan cron, yang dijalankan secara normal dari shell tetapi tidak menunjukkan perilaku yang sama saat dijalankan dari crontab.
Akar Penyebab
Salah satu penyebab paling sering untuk pekerjaan crontab tidak dijalankan dengan benar adalah bahwa cronjob tidak berjalan di bawah lingkungan shell pengguna. Alasan lain bisa – tidak menentukan jalur absolut dari perintah yang digunakan dalam skrip. Saat skrip dijalankan secara manual, variabel lingkungan seperti PATH bisa berbeda dari saat dijalankan dari cron. Jadi selalu disarankan untuk menyertakan jalur absolut dari perintah yang digunakan dalam skrip.
Oleh karena itu, variabel lingkungan apa pun untuk pengguna yang ada di shell normal tidak akan tersedia selama eksekusi cron job kecuali jika diimpor oleh skrip secara eksplisit.
Misalnya, jika shell memiliki variabel ORACLE_HOME yang ditentukan dan memasukkannya ke dalam variabel lingkungan PATH dan skrip menggunakan variabel-variabel tersebut, skrip akan dieksekusi dalam penjualan, tetapi ketika dijalankan dari crontab skrip tidak akan mengetahui variabel tersebut secara default.
Solusinya
Definisikan atau impor ORACLE_HOME dan variabel PATH lengkap dalam file skrip cron, seperti yang Anda lihat saat berada di dalam shell pengguna oracle (oracle_user_shell> echo $PATH).
Praktik yang baik adalah selalu mengimpor lingkungan pengguna di awal skrip script.sh dengan perintah:
#!/bin/bash . /home/oracle/.bashrc [rest of script]
Ini akan membaca /home/Oracle/.bashrc dan mengimpor lingkungan di dalamnya. Bergantung pada lingkungan pengguna, itu juga bisa berupa /home/Oracle/.bash_profile atau file lainnya.
CATATAN :Ada spasi di antara titik “.” dan “/rumah..”
[* * * * *] /home/oracle/script.sh 2> /tmp/crontab_script_log.txt 2>&1
Catatan :Ganti [* * * * *] dengan waktu eksekusi yang benar untuk kasus Anda.
Anda kemudian dapat memeriksa /tmp/crontab_script_log.txt untuk output dari eksekusi. Jika ada variabel yang tidak terdefinisi atau jika skrip memiliki kesalahan lain, output akan memudahkan untuk menemukan penyebab masalah.