it-swarm-id.com

Di mana kesalahan cron dicatat?

Jika saya mensetup cron pekerjaan salah, pekerjaan itu tampaknya gagal. Di mana saya harus mencari log kesalahan untuk memahami apa yang salah?

182
Brian Lyttle

Seperti yang telah ditunjukkan orang lain, cron akan mengirimi Anda output dari setiap program yang dijalankannya (jika ada output). Jadi, jika Anda tidak mendapatkan output apa pun, pada dasarnya ada tiga kemungkinan:

  1. crond bahkan tidak dapat memulai Shell untuk menjalankan program atau mengirim email
  2. crond mengalami masalah saat mengirimkan output, atau emailnya hilang.
  3. program tidak menghasilkan output apa pun (termasuk pesan kesalahan)

Kasus 1. sangat tidak mungkin, tetapi sesuatu harus ditulis dalam log cron. Cron memiliki fasilitas syslog milik sendiri, jadi Anda harus melihat /etc/syslog.conf (atau file yang setara di distro Anda) untuk melihat di mana pesan fasilitas cron dikirim. Tujuan populer termasuk /var/log/cron, /var/log/messages dan /var/log/syslog.

Dalam kasus 2., Anda harus memeriksa log daemon mailer: pesan dari daemon Cron biasanya muncul dari [email protected]. Anda dapat menggunakan MAILTO=... baris dalam file crontab untuk meminta cron mengirim email ke alamat tertentu, yang seharusnya memudahkan untuk melihat log daemon mailer. Contohnya:

[email protected]
00 15 * * *  echo "Just testing if crond sends email"

Dalam kasus 3., Anda dapat menguji apakah program itu benar-benar dijalankan dengan menambahkan perintah lain yang efeknya dapat Anda periksa dengan mudah: misalnya,

00 15 * * * /a/command; touch /tmp/a_command_has_run

jadi Anda dapat memeriksa apakah crond telah benar-benar menjalankan sesuatu dengan melihat waktu /tmp/a_command_has_run.

116
Riccardo Murri

Anda selalu dapat secara eksplisit mengirim output pekerjaan ke file log:

0 8 * * * /usr/local/bin/myjob > /var/log/myjob.log 2>&1

Ingatlah bahwa ini akan menggantikan perilaku email yang telah disebutkan sebelumnya, karena crond sendiri tidak akan menerima output apa pun dari pekerjaan tersebut. Jika Anda ingin mempertahankan perilaku itu, Anda harus melihat ke tee (1).

54
codehead

Jika Anda tidak melihat surel, Anda mungkin melakukan spamming root @ perusahaan Anda dengan kesalahan yang bisa sangat mengganggu orang-orang yang menggunakan akun itu untuk memantau. Coba kirim hasilnya ke Syslog:

*/5 * * * * yourcronjob 2>&1 | /usr/bin/logger -t yourtag

Kemudian, tunggu cronjob dijalankan dan cari kesalahan di/var/log/messages (atau /var/log/user.log pada beberapa sistem).

Ini berfungsi baik untuk pesan kesalahan yang panjangnya hanya 1-2 baris, seperti "yourcronjob: command not found". Itu juga memanfaatkan infrastruktur syslog Anda yang ada (Logrotation, syslogging pusat, Splunk, dll.) Ini juga mengurangi spam email untuk di-root.

Ini mungkin bukan solusi yang baik jika cronjob Anda menghasilkan ratusan baris output.

44
Stefan Lasiewski

Anda harus mendapatkan email dari crond saat pekerjaan gagal dijalankan atau ketika pekerjaan mengembalikan kode keluar yang tidak nol. Coba ketikkan:

$ mailx

pada perintah Prompt.

mailx(1) adalah program membaca surat dasar pada hampir semua sistem Unixlike. Ini sangat primitif menurut standar modern, tetapi Anda dapat mengandalkannya untuk selalu tersedia. Lainnya, agen surat yang lebih baik mungkin tersedia, tetapi ada cukup banyak dari mereka yang Anda tidak pernah tahu yang diinstal pada mesin acak yang kebetulan Anda gunakan.

Perhatikan bahwa kecuali Anda telah mengonfigurasi sistem Anda sebagai server email Internet, subsistem email ini hanya digunakan di dalam mesin. Anda dapat mengirim email ke dan menerima dari pengguna lain di mesin, tetapi Anda mungkin tidak dapat mengirim email ke dunia, dan email dari dunia luar tentu tidak akan bisa datang ke mesin Anda.

8
Warren Young

Konfigurasi cron default akan mengirimi Anda email dengan hasil program Anda. Jika ini gagal, Anda bisa mencoba membungkus program Anda yang gagal dalam skrip Shell yang memastikan bahwa program tersebut tidak gagal, dan Anda bisa mencatat hasilnya lebih lanjut.

Ini adalah pengaturan yang dapat dikonfigurasi pada beberapa implementasi cron.

8
miguel.de.icaza

Cron mencatat info dasar ke /var/log/messages, tetapi mengirimkan output program apa pun kepada pengguna yang meminta.

5
Hemant

Saya menemukan thread ini beberapa tahun yang lalu mengalami masalah yang sama dan baru-baru ini menemukan solusi untuk kasus yang disebutkan di atas oleh Ricardo. Kurangnya email sulit untuk dideteksi (seperti yang Anda sebutkan) dan Anda tentu tidak ingin mengirim spam ke email perusahaan Anda. Jika tertarik, periksa deadmanssnitch.com. . Alat ini tampaknya bisa menyelesaikan kasus-kasus tersebut. Tampaknya cukup mudah digunakan — cukup tambahkan sedikit kode yang diberikan alat ini kepada cronjob Anda. Jika pekerjaan Anda gagal dijalankan pada internal yang ditentukan, Anda akan diberitahu. Jika pekerjaan Anda mulai berjalan lagi Anda juga akan diperingatkan.

2
ss_jt

Saya menggunakan vixie-cron, Jadi saya tidak tahu apakah ini berlaku untuk semuanya. Tapi saya punya file dead.letter Yang berisi semua hasil pekerjaan.

Dalam folder /root/ Saya, saya memiliki crons.cron Yang saya tetapkan sebagai crontab dengan menjalankan crontab /root/crons.cron. dead.letter Juga akan dibuat di /root/.

Edit Saya baru saja Google'd dead.letter, Dan itu adalah surat yang tidak terkirim. Tampaknya tidak ada hubungannya dengan cron. Jika Anda tidak mengatur email dengan benar (seperti saya), Anda akan memiliki file tersebut.

1
jonescb

Trik lain yang bermanfaat adalah melihat skrip apa yang sebenarnya dieksekusi.

Ini dilakukan dengan run-parts -v --test /etc/cron.hourly/

> /etc/cron.hourly//logrotate

Jika skrip Anda tidak muncul, skrip tidak akan dieksekusi.

Btw ini hanya berfungsi untuk skrip yang dipasang di /etc/cron.hourly direktori. Itu tidak menunjukkan barang-barang yang diatur dalam crontab Anda.

1
RickyA

Bagi pemula, ini bisa menyusahkan untuk debug. Pastikan untuk tidak menukar nilai menit dan jam. Menit datang pertama, lalu jam. Ketika Anda memberikan nilai kurang dari 12 untuk masing-masing, nilai itu akan menerimanya tetapi mungkin tidak berfungsi seperti yang diharapkan atau sama sekali.

0
Michael Woyo