Lebih baik masuk untuk cronjobs? Kirim output cron ke syslog?

43

Saya mencari cara yang lebih baik untuk mencatat cronjobs. Kebanyakan cronjobs cenderung mengirim email spam atau konsol, diabaikan, atau membuat file log lain.

Dalam hal ini, saya memiliki skrip Nagios NSCA yang mengirim data ke server Nagios sentral. Skrip send_nsca ini juga mencetak satu baris status ke STDOUT, menunjukkan keberhasilan atau kegagalan.

0 * * * * root    /usr/local/nagios/sbin/nsca_check_disk

Ini mengirim email pesan berikut ke root @ localhost, yang kemudian diteruskan ke tim sysadmin saya. Spam.

penerusan nsca_check_disk: 1 paket data berhasil terkirim ke host.

Saya mencari metode pencatatan yang:

  1. Tidak mengirim spam pesan ke email atau konsol
  2. Jangan membuat file krufty lain yang membutuhkan pembersihan bulan atau tahun kemudian.
  3. Menangkap informasi log di suatu tempat, sehingga dapat dilihat nanti jika diinginkan.
  4. Berfungsi pada sebagian besar unix
  5. Sesuai dengan infrastruktur log yang ada.
  6. Menggunakan konvensi umum syslog seperti 'fasilitas' dan 'prioritas'
  7. Dapat bekerja dengan skrip pihak ketiga yang tidak selalu melakukan pencatatan secara internal.
Stefan Lasiewski
sumber

Jawaban:

69

Dalam proses penulisan pertanyaan ini, saya menjawab sendiri. Jadi saya akan menjawab sendiri " Gaya Jeopardy ". Ini memperluas jawaban yang diberikan oleh Dennis Williamson.

Berikut ini akan mengirimkan output Cron ke /usr/bin/logger(termasuk stderr, yang dikonversi ke stdout menggunakan 2>&1), yang akan mengirim ke syslog, dengan 'tag' dari nsca_check_disk. Syslog menanganinya dari sana. Karena sistem ini (CentOS dan FreeBSD) sudah memiliki mekanisme rotasi log bawaan, saya tidak perlu khawatir tentang log seperti / var/log/mycustom.logmengisi disk.

*/5 * * * * root    /usr/local/nagios/sbin/nsca_check_disk 2>&1 | /usr/bin/logger -t nsca_check_disk

/ var / log / messages sekarang memiliki satu pesan tambahan yang mengatakan ini:

Apr 29, 17:40:00 192.168.6.19 nsca_check_disk: 1 data packet(s) sent to host successfully.

Saya suka / usr / bin / logger, karena berfungsi baik dengan konfigurasi dan infrastruktur syslog yang ada, dan disertakan dengan sebagian besar distro Unix. Kebanyakan distribusi * nix sudah melakukan rotasi log dan melakukannya dengan baik.

Stefan Lasiewski
sumber
1
Apa yang dilakukan perintah 2> & 1? apa artinya? Terima kasih.
Brettski
dengan systemd di Ubuntu 00 00 * * * systemd-cat -t "tagname" /path/to/app.shsetelahsudo crontab -u root -e
dashesy
5

Pipa output melalui logger .

0 * * * * root    /usr/local/nagios/sbin/nsca_check_disk | logger -p local0.notice

Sunting: Pembaruan Anda sepertinya cara yang tepat untuk pergi.

Dijeda sampai pemberitahuan lebih lanjut.
sumber
Terima kasih! Setelah saya memposting pertanyaan saya, saya melihat bahwa log pipa Apache output ke / usr / bin / logger. Saya tidak menyadari bahwa kita dapat mem-pipe output ke logger (1) - tidak ada di halaman manual!
Stefan Lasiewski
2
"message - Tulis pesan untuk dicatat; jika tidak ditentukan, dan flag -f tidak disediakan, input standar dicatat."
Dijeda sampai pemberitahuan lebih lanjut.
1

Anda juga dapat menjalankan crondopsi -s(atau -Sdi Busybox) sehingga hasilnya dikirim ke syslog.

Stuart Cardall
sumber