Jika saya cron
salah mengatur pekerjaan, tampaknya gagal. Di mana saya harus mencari log kesalahan untuk memahami apa yang salah?
Jika saya cron
salah mengatur pekerjaan, tampaknya gagal. Di mana saya harus mencari log kesalahan untuk memahami apa yang salah?
Jawaban:
Seperti yang telah ditunjukkan orang lain, cron
akan mengirimi Anda output dari program apa pun 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
memiliki masalah mengirim output, atau email 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-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 root@yourhost
. Anda dapat menggunakan MAILTO=...
baris dalam file crontab untuk meminta cron mengirim email ke alamat tertentu, yang seharusnya memudahkan untuk melihat log daemon mailer. Misalnya:
MAILTO=my.offsite.email@example.org
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
sehingga Anda dapat memeriksa apakah crond
telah benar-benar menjalankan sesuatu dengan melihat waktu /tmp/a_command_has_run
.
dead.letter
di root atau direktori home pengguna masing-masing.
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).
>>
alih-alih >
, jadi Anda tidak menimpa file log setiap saat?
| /usr/bin/logger
jika Anda mau, seperti yang disarankan oleh Stefan. Pilih racun Anda: tldp.org/LDP/abs/html/io-redirection.html
myjob.log
dengan ukuran 0 seperti yang diharapkan, tetapi log ke file lain, di mana saya bisa mengubah pengaturan ini?
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.
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.
Anda harus mendapatkan email dari crond
saat pekerjaan gagal dijalankan atau ketika pekerjaan mengembalikan kode keluar yang tidak nol. Coba ketikkan:
$ mailx
di command 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 beberapa 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.
Cron mencatat info dasar /var/log/messages
, tetapi mengirimkan output program apa pun kepada pengguna yang meminta.
/var/log/messages
di server Ubuntu saya ( 4.4.0-128-generic #154-Ubuntu SMP
). Ada yang tahu kenapa? I'va memiliki beberapa tugas cron yang didefinisikan dalam root
crontab selama berbulan-bulan (misalnya apt autoremove
), tetapi tidak ada yang dieksekusi.
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 dideteksi (seperti yang Anda sebutkan) dan Anda tentu tidak ingin mengirim spam ke email perusahaan Anda. Jika tertarik lihat 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 dead.letter
file yang berisi semua hasil pekerjaan.
Di /root/
folder saya, saya memiliki crons.cron
yang saya tetapkan sebagai crontab saya dengan menjalankan crontab /root/crons.cron
. dead.letter
akan dibuat /root/
juga.
Sunting
Saya baru saja Google'd dead.letter
, dan ini surat yang tidak terkirim. Tampaknya tidak ada hubungannya dengan cron. Jika Anda tidak mengatur email dengan benar (seperti saya), Anda akan memiliki file tersebut.
Untuk 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.