Cara menjalankan Skrip Shell dengan Cron Job

Saya memiliki skrip Shell seperti di bawah ini

 echo "Hello World"

Script terletak di folder /root/scripts/ sebagai test.sh

Saya juga membuat pekerjaan cron seperti di bawah ini

  0-59 * * * *  ./scripts/test.sh

Sekarang tugas cron tidak mencetak konten dalam test.sh setiap menit.

Beri tahu saya jika saya memberikan direktori yang salah atau ada masalah lain pada kode saya.


person user1093513    schedule 13.08.2012    source sumber


Jawaban (4)


saya akan

  1. Bersikaplah eksplisit. direktori Anda untuk dieksekusi dari mis. /root/scripts/test.sh. Saya tidak tahu apa yang cron anggap sebagai direktori saat ini
  2. Redirect stdout ke file log mis. ...test.sh > /tmp/cron.log (Anda mungkin juga ingin mengalihkan stderr pada tahap tertentu menggunakan 2>&1). Jika tidak, Anda tidak akan melihat hasilnya. Itu akan dikirimkan ke pemilik cronjob
  3. Pastikan Anda telah memberikan izin eksekusi pada skrip bash Anda (chmod +x /root/scripts/test.sh)
  4. Jelaskan secara eksplisit skrip mana yang dapat dieksekusi yang akan mengeksekusi skrip shell Anda. Merupakan praktik yang baik untuk memiliki pemanggilan skrip di bagian atas, mis. #!/bin/sh atau serupa

Menjalankan sesuatu di bawah cron sangatlah rumit. Pekerjaan Cron dijalankan dengan lingkungan yang dikurangi secara besar-besaran. Penting untuk mencetak lingkungan yang tersedia untuk skrip Anda (gunakan env) dan bandingkan/kontraskan dengan apa yang tersedia dari shell interaktif Anda.

person Brian Agnew    schedule 13.08.2012
comment
Setelah skrip dijalankan, saya dapat melihat hello world di terminal, bukan? - person user1093513; 13.08.2012
comment
Tidak, output dari perintah cron dikirim melalui email ke pemilik crontab. - person Douglas Leeder; 13.08.2012
comment
@DouglasLeeder - terima kasih atas pengiriman suratnya. Saya telah memasukkannya ke dalam jawabannya - person Brian Agnew; 13.08.2012

Kamu harus menggunakan

* * * * * /path/to/scriptFile

untuk menjalankan skrip setiap menit

dan periksa pemilik folder skrip Anda jika pemilik belum izin untuk menjalankan skrip, berikan izin atau ubah pemilik yang memiliki izin

person Vaibhav Jain    schedule 31.08.2013
comment
Hai, saya menulis skrip yang berfungsi baik jika saya menggunakannya secara manual tanpa cron tetapi di cron tidak berfungsi. Ini cron saya: * * * * * sudo /opt/modulo/log/check.sh jika Anda dapat membantu saya, saya akan senang - person Tomer; 14.05.2017

Masalah umum yang dihadapi oleh pengguna unix baru ketika menggunakan cron untuk meluncurkan skrip adalah cronjobs mereka tidak memiliki akses ke lingkungan yang sama dengan shell pengguna mereka. Jadi skrip yang dieksekusi di shell pengguna berfungsi dengan sempurna, tetapi gagal ketika diluncurkan dari cron. Penyebab nomor satu dalam kasus ini adalah variabel lingkungan $PATH shell Anda berbeda dengan variabel lingkungan shell cronjob.

Untuk menguji jalankan '/bin/echo $PATH > myShellPath'. Di cron jalankan '/bin/echo $PATH > myCronPath'. Bandingkan myShellPath dengan myCronPath.

Dalam contoh yang diberikan, skrip mengeksekusi echo, yang pada sistem CENTOS6 saya ditemukan di bawah/bin. Perintah echo ditemukan oleh shell dengan mencari file 'echo' di salah satu direktori yang terdaftar dalam variabel lingkungan $PATH. Jika variabel lingkungan $PATH cronjob Anda tidak menyertakan /bin, perintah echo akan gagal.

Jika ini masalahnya, solusi paling sederhana adalah dengan secara eksplisit mengatur jalur ke 'echo' di skrip Anda. Untuk melihat path lengkap sistem Anda untuk echo, ketik 'which echo' di shell Anda.

Contoh:

[countChocula@bozo ~]$ which echo
/bin/echo

Dalam hal ini Anda akan mengedit skrip dan mengganti 'echo' dengan '/bin/echo'. Lebih baik lagi, atur variabel $PATH dalam skrip Anda untuk memasukkan direktori tempat echo berada.

Untuk informasi lebih lanjut, telitilah "shell apa yang saya jalankan dan bagaimana variabel lingkungan saya diatur?", "shell apa yang digunakan cron dan bagaimana cara mengatur variabel lingkungan cron?", "bagaimana cara melihat variabel lingkungan cronjob saya?"

person mcchiz    schedule 05.04.2014

Saat Anda menambahkan file di cron tidak mengerti './scripts/test.sh'. Jadi, Anda harus menambahkan cron sebagai berikut:

  0-59 * * * *  bash /root/scripts/test.sh

Dan Anda menambahkan izin untuk file sebagai:

chmod a+x /root/scripts/test.sh

Saat skrip dijalankan, oke.

person Tannetto    schedule 16.01.2017