GNU/Linux >> Belajar Linux >  >> Linux

Skrip Cron tidak Dieksekusi seperti yang Diharapkan dari crontab – Pemecahan Masalah

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..”

KIAT :Untuk memecahkan masalah eksekusi entri crontab dengan lebih baik, Anda dapat mengubahnya untuk mencatat output ke file, misalnya:

[* * * * *] /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.


Linux
  1. Bashscript Bekerja Dari Terminal Tetapi Tidak Dari Crontab?

  2. Perintah Rm Dalam Skrip Bash Tidak Bekerja Dengan Variabel?

  3. Bagaimana Cara Mengeksekusi Skrip Sh Dari Pintasan Desktop?

  1. Jalankan Skrip Sh Dari File *.desktop?

  2. Masalah Crontab:Cron Job Tidak Berfungsi Saat Menggunakan Persentase

  3. Jalankan skrip Python melalui crontab

  1. Tetapkan ip statis jika tidak diperoleh dari DHCP (skrip)

  2. atom buat file jika tidak ada dari skrip bash

  3. Variabel lingkungan TERM tidak disetel