Pertanyaan cron berjalan tetapi tidak ada yang terjadi


Saya telah membuat skrip bernama "forward_email.sh" dan mengatur izin ke 777. Ini berisi baris berikut:

echo "It worked: $(date)" >> /home/noc/email.log

Saya membuat cron job dengan baris berikut:

*/5 * * * * /home/noc/forward_email.sh

Masalahnya adalah file "email.log" tidak pernah diubah. Saya bahkan mengatur izin untuk 666. Ketika saya menjalankan skrip secara manual, itu bekerja dengan sempurna.

Pekerjaan cron berjalan sesuai dengan file "/var/log/cron.log".

Dapatkah seseorang mengarahkan saya ke arah yang benar tentang apa yang mungkin salah? Ini adalah instalasi mesin virtual minimal Ubuntu Server 9.04 dengan cron diinstal melalui apt-get.

MEMPERBARUI: Saya membuat kesalahan yang sangat bodoh. Saya beri nama skrip saya "forward_mail.sh". Saya tidak sampai saya menginstal beberapa layanan email dan mendapat email kesalahan berikut dari Cron yang saya temukan kesalahan saya.


4
2017-08-04 03:49


asal


bukankah ini lebih seperti .. pertanyaan serverfault? - codingbear
Pengguna menggunakan cron. - Richard Hoskins
dapatkah Anda memberikan keluaran crontab-l? - John T
crontab-l menampilkan baris yang sama dalam pertanyaan aslinya. - Joseph
Apakah /etc/cron.allow ada? - Richard Hoskins


Jawaban:


Banyak hal potensial di luar kepala saya.

Apakah Anda yakin entri crontab benar-benar menunjuk pada skrip Anda? Misalnya, jika Anda ingin menjalankan skrip seperti ~ noc / bin / script.sh, tetapi memiliki entri seperti / home / noc / bin / skrip (yaitu tipo halus) maka tentu saja itu tidak akan berhasil. Saya biasanya memeriksa entri crontab saya dengan menyalin perintah dari crontab dengan mouse saya, lalu menempelkannya ke command prompt, hanya untuk 100% yakin bahwa itu akan menjalankan apa yang saya inginkan.

Apakah skrip Anda mengandung hanya garis yang ditunjukkan? Biasanya Anda harus menyertakan sesuatu seperti:

#!/bin/bash

... di bagian atas naskah Anda untuk membuatnya bekerja.

Jika itu lebih rumit daripada garis tunggal, apakah Anda yakin logika pemrograman akan mengizinkannya untuk menjalankan garis tertentu?

Coba kurangi skrip Anda

#!/bin/bash
echo "Bing!" >> /tmp/cronjob

... untuk melihat apa yang terjadi. Jika berhasil, Anda memiliki masalah pemrograman dalam skrip cron Anda. Jika gagal, Anda memiliki masalah cron.

Apakah pengguna 'noc' yang menjalankan skrip? Jika tidak, apakah Anda yakin bahwa pengguna menjalankan skrip cron memiliki akses baca / tulis melalui / home / noc ke file email.log?

Di mana email kesalahan dari pengguna menjalankan cronjob? Apakah email kesalahan dibuat, dan kemudian dikirim ke suatu tempat yang tidak Anda harapkan atau mungkin dicampakkan sama sekali? Coba cronjob dari

#!/bin/bash
echo "Bing!"

... dan kemudian mencoba mencari tahu di mana email yang dihasilkan masuk.

Apakah cron.deny dan / atau cron.allow sedang diputar? Jika /etc/cron.allow ada, maka pengguna noc harus terdaftar di dalamnya; jika /etc/cron.deny ada. noc pengguna harus tidak tercantum di dalamnya. Pada RedHat, jika tidak ada cron.allow atau cron.deny, maka HANYA pengguna root akan diizinkan untuk menggunakan cron.


6
2017-08-04 04:14



Saya mengurangi skrip saya dan tidak ada yang terjadi. Pengguna noc adalah satu-satunya pengguna yang menjalankan skrip karena ini adalah satu-satunya akun. Saya tidak memiliki layanan email yang diinstal di server ini. - Joseph
Erm ... apakah ubunto menggunakan cron.allow dan cron.deny? - David Mackintosh
Oke, lihat pembaruan Anda, senang Anda sudah tahu jawabannya. - David Mackintosh


Cron berjalan dengan variabel lingkungan terbatas yang ditetapkan, terutama Anda $PATH. Coba letakkan path lengkap ke biner apa pun. Begitu /home/noc/forward_email.sh seharusnya:

/bin/echo "It worked: $(date)" >> /home/noc/email.log

Juga, apa yang terjadi */5 lakukan di awal skrip Anda?  */5 berjalan sekali setiap lima menit, 5 berjalan sekali ’5 menit melewati jam setiap jam.

5    *   *   *    * /home/noc/forward_email.sh
#*   *   *   *    *  command to be executed
#-   -   -   -    -
#|   |   |   |    |
#|   |   |   |    +----- day of week (0 - 6) (Sunday=0)
#|   |   |   +------- month (1 - 12)
#|   |   +--------- day of month (1 - 31)
#|   +----------- hour (0 - 23)
#+------------- min (0 - 59)

Akhirnya, apakah Anda mengedit & menyimpan crontab dengan perintah berikut:

crontab -e

... di mana editor Anda dipilih oleh variabel lingkungan $EDITOR?


5
2017-08-04 04:22



* / 5 menjalankannya setiap 5 menit. hanya memiliki 5 orang akan menjalankannya setiap jam pada 5 menit melewati jam. - pgs
Menambahkan jalur lengkap tidak mengubah apa pun. Saya membuat contrab dengan "crontab -e". Editornya adalah nano. - Joseph


echo "It worked: $(date)" >> /home/noc/email.log

Apakah /home/noc/email.log ada sebelum Anda menjalankan skrip? Apakah bisa ditulis oleh pengguna yang menjalankan tugas cron? Apa yang terjadi jika Anda membuatnya sebelumnya? misalnya

touch /home/noc/email.log
chmod 666 /home/noc/email.log

1
2017-08-04 04:43



Tidak iya. Hal yang sama. - Joseph


Jika Anda memiliki keraguan tentang skrip Anda, letakkan baris di bawah ini di bagian atas skrip:

 #!/bin/bash -x

(jika Anda tidak menggunakan cangkang ini, cukup tempelkan yang bagus)

Memulai subkulit dengan -x (eXplicit) opsi, yang akan menjalankan seluruh skrip dalam mode debug. Jejak setiap perintah ditambah argumennya dicetak ke output standar setelah perintah telah diperluas tetapi sebelum dieksekusi.


0
2017-12-21 18:33