Jika saya mensetup cron
pekerjaan salah, pekerjaan itu tampaknya gagal. Di mana saya harus mencari log kesalahan untuk memahami apa yang salah?
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:
crond
bahkan tidak dapat memulai Shell untuk menjalankan program atau mengirim emailcrond
mengalami masalah saat mengirimkan output, atau emailnya hilang.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
.
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).
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.
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.
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.
Cron mencatat info dasar ke /var/log/messages
, tetapi mengirimkan output program apa pun kepada pengguna yang meminta.
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.
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.
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.
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.