การบันทึกที่ดีกว่าสำหรับ cronjobs? ส่งเอาต์พุต cron ไปยัง syslog หรือไม่


43

ฉันกำลังมองหาวิธีที่ดีกว่าในการบันทึก cronjobs cronjobs ส่วนใหญ่มีแนวโน้มที่จะสแปมอีเมลหรือคอนโซลรับละเว้นหรือสร้าง logfile อื่น

ในกรณีนี้ฉันมีสคริปต์ Nagios NSCA ซึ่งส่งข้อมูลไปยังเซิร์ฟเวอร์ Nagios กลาง สคริปต์ send_nsca นี้ยังพิมพ์บรรทัดสถานะเดี่ยวไปที่ STDOUT ซึ่งระบุว่าสำเร็จหรือล้มเหลว

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

อีเมลนี้ส่งข้อความต่อไปนี้เพื่อรูท @ localhost ซึ่งจะถูกส่งต่อไปยังทีม sysadmins ของฉัน สแปม

ส่งต่อ nsca_check_disk: 1 แพ็คเก็ตข้อมูลที่ส่งไปยังโฮสต์สำเร็จแล้ว

ฉันกำลังมองหาวิธีการเข้าสู่ระบบซึ่ง:

  1. ไม่ส่งสแปมข้อความไปยังอีเมลหรือคอนโซล
  2. อย่าสร้างไฟล์บันทึก krufty อันอื่นซึ่งต้องใช้การล้างข้อมูลเป็นเดือนหรือหลายปีต่อมา
  3. เก็บข้อมูลบันทึกไว้ที่ใดที่หนึ่งเพื่อให้สามารถดูได้ในภายหลังหากต้องการ
  4. ใช้งานได้กับยูนิกซ์ส่วนใหญ่
  5. พอดีกับโครงสร้างพื้นฐานบันทึกที่มีอยู่
  6. ใช้การประชุม syslog ทั่วไปเช่น 'สิ่งอำนวยความสะดวก' และ 'ลำดับความสำคัญ'
  7. สามารถทำงานกับสคริปต์ของบุคคลที่สามซึ่งไม่ได้ทำการบันทึกภายใน

คำตอบ:


69

ในขั้นตอนการเขียนคำถามนี้ฉันตอบตัวเอง ดังนั้นฉันจะตอบตัวเอง " สไตล์อันตราย " นี่เป็นการขยายคำตอบของเดนนิสวิลเลียมสัน

ต่อไปนี้จะส่งผลลัพธ์ใด ๆ ที่จะ Cron /usr/bin/logger(รวม stderr ซึ่งจะถูกแปลงเป็น stdout ใช้2>&1) ซึ่งจะส่งไปที่ syslog กับ 'แท็ก' nsca_check_diskของ Syslog จัดการมันจากที่นั่น เนื่องจากระบบเหล่านี้ (CentOS และ FreeBSD) มีกลไกการหมุนเวียนการบันทึกในตัวอยู่แล้วฉันจึงไม่ต้องกังวลเกี่ยวกับบันทึกเช่น / var/log/mycustom.logการเติมดิสก์

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

/ var / log / messages ขณะนี้มีข้อความเพิ่มเติมหนึ่งข้อความซึ่งกล่าวว่า

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

ฉันชอบ / usr / bin / logger เพราะมันทำงานได้ดีกับการกำหนดค่า syslog และโครงสร้างพื้นฐานที่มีอยู่และรวมอยู่ใน Unix distros การแจกแจง * nix ส่วนใหญ่ทำการหมุนบันทึกแล้วและทำได้ดี


1
คำสั่ง 2> & 1 ทำอะไร มันหมายความว่าอะไร? ขอขอบคุณ.
Brettski


กับ systemd ในอูบุนตู00 00 * * * systemd-cat -t "tagname" /path/to/app.shหลังจากsudo crontab -u root -e
dashesy

5

ท่อส่งออกผ่านตัดไม้

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

แก้ไข: การอัปเดตของคุณดูเหมือนจะเป็นวิธีที่ถูกต้อง


ขอบคุณ! หลังจากที่ฉันโพสต์คำถามของฉันฉันเห็นว่า Apache ไพพ์ล็อกเอาต์พุตไปยัง / usr / bin / logger ฉันไม่ได้ตระหนักว่าเราสามารถส่งออกไปยังคนตัดไม้ (1) - มันไม่ได้อยู่ใน manpage!
Stefan Lasiewski

2
"message - เขียนข้อความเพื่อบันทึกหากไม่ได้ระบุและไม่ได้ระบุแฟล็ก -f อินพุตมาตรฐานจะถูกบันทึก"
Dennis Williamson

1

นอกจากนี้คุณยังสามารถทำงานcrondกับตัวเลือก-s(หรือ-Sใน Busybox) syslogเพื่อให้ผลลัพธ์ที่ถูกส่งไปยัง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.