ฉันจะป้องกัน cron ไม่ให้เติม syslog ของฉันได้อย่างไร


31

ฉันมีสคริปต์ที่จะต้องดำเนินการในแต่ละนาที ปัญหาคือ cron กำลังเข้าสู่ระบบ/var/log/syslogทุกครั้งที่ดำเนินการ ฉันท้ายที่สุดเห็นบางสิ่งเช่นนี้ซ้ำแล้วซ้ำอีกใน/var/log/syslog:

Jun 25 00:56:01 myhostname /USR/SBIN/CRON[1144]: (root) CMD (php /path/to/script.php > /dev/null)

ฉันใช้ Debian

คำถามของฉันคือ: มีวิธีใดที่ฉันสามารถบอก cron ได้ไม่เขียนข้อมูลนี้ไปยัง syslog ทุกครั้ง?


1
มีความคิดวิธีการทำสิ่งนี้บนแพลตฟอร์ม Busybox หรือไม่? รูปแบบของ /etc/syslog.conf ที่แตกต่างกัน ...
มาร์ค Lakata

คำตอบ:


25

คุณสามารถส่งเอาต์พุตของ cron ไปยังตัวช่วยบันทึกแยกต่างหากเพิ่มสิ่งต่อไปนี้ใน/etc/syslog.confไฟล์ของคุณ:

# Log cron stuff
cron.*                                                  /var/log/cron

อย่าลืมเพิ่ม/var/log/cronในของคุณ/etc/logrotate.d/syslogเพื่อให้แน่ใจว่าได้รับการหมุนเช่น

# /etc/logrotate.d/syslog
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron {
    sharedscripts
    postrotate
    /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}

ขอบคุณสำหรับการป้อนข้อมูล ฉันเพิ่ม cron. * / var / log / cron และเริ่ม cron ใหม่ แต่มันยังคงทิ้งข้อความลงใน / var / log / syslog ในขณะที่ปล่อยให้ / var / log / cron ว่างเปล่า ไม่แน่ใจว่าทำไมมันไม่ทำอะไรเลย
user7321

1
โอ้มนุษย์มหากาพย์ความล้มเหลวในส่วนของฉัน ฉันแก้ไข syslog.conf และรีสตาร์ท cron !! ไม่น่าแปลกใจว่ามันจะไม่ทำงาน .. ฉันควรจะรีสตาร์ท syslog =)
user7321

1
การเปิดใช้งาน cron.log ไม่ได้ป้องกันไม่ให้ข้อความ cron ถูกเขียนไปยัง syslog
พื้นฐาน 6

16

ตกลง,

คำตอบสำหรับคำถามของฉันคือ:

เปลี่ยนแปลง

*.*;auth,authpriv.none     -/var/log/syslog

ไปยัง

*.*;cron,auth,authpriv.none     -/var/log/syslog

ภายใน/etc/syslog.confแล้วรีสตาร์ท syslog

ฉันยังมี cron ที่ถูกส่งไป/var/log/cron.logตามที่ Dave Cheney แนะนำและติดอยู่ใน logrotate ข้อเสนอแนะการแก้ไขด้วย Daves ของฉันเหมาะสมที่สุดสำหรับสถานการณ์ของฉันเพราะ:

  1. มันป้องกันไม่ให้/var/log/syslogรกด้วยข้อความ cron
  2. ฉันยังได้รับข้อความ cron (ซึ่งดีสำหรับการแก้ไขปัญหา)
  3. logrotate ป้องกันไม่ให้/var/log/cron.logมีขนาดใหญ่เกินไป

7
สำหรับผู้ที่เกี่ยวข้องกับระบบที่ทันสมัยมีrsyslogใน Debian 8.0 Jessie ดังนั้นจึงเป็นสิ่ง/etc/rsyslog.confที่ต้องแก้ไข โดยวิธีการสตริงที่จะเพิ่มมีอยู่แล้วโดยค่าเริ่มต้นคุณต้องเพียงแค่ยกเลิกการแสดงความคิดเห็น (สาย 63) และ/var/log/cron.logมีอยู่แล้วใน/etc/logrotate.d/syslogเช่นเดียวกับที่ผู้ดูแลแพคเกจได้อ่านกระทู้นี้
TranslucentCloud

Is there any way I can tell cron not write this information to syslog every timeคำถามของคุณ นี่ไม่ใช่คำตอบ
ntd

@TranslucentCloud แค่อยากจะเพิ่มว่าการกำหนดค่า rsyslog ของฉันใน Ubuntu 14 LTS อยู่ใน /etc/rsyslog.d/50-default.conf
จอห์นนี่

8

เปลี่ยน / etc / default / cron

  # Or, to log standard messages, plus jobs with exit status != 0:
  # EXTRA_OPTS='-L 5' 
  #
  # For quick reference, the currently available log levels are:
  #   0   no logging (errors are logged regardless)
  #   1   log start of jobs
  #   2   log end of jobs
  #   4   log jobs with exit status != 0
  #   8   log the process identifier of child process (in all logs)
  #
  EXTRA_OPTS="-L 0"

โดยค่าเริ่มต้นบรรทัด EXTRA_OPTS คือ ""


IMO นี้เป็นวิธีแก้ไขที่ถูกต้อง: อย่าสร้างบันทึกข้อมูล
ntd

4

ใน Ubuntu 14.04.5 (และที่อื่น ๆ ) มี rsyslogd แทนที่จะเป็น syslogd TranslucentCloud พูดถึงเรื่องนี้กับ Debian Jessie แต่วิธีแก้ไขปัญหาเดียวกัน (แต่เปลี่ยน rsyslog.conf แทนที่จะเป็น syslogd.conf) ดูเหมือนว่าจะไม่ทำงานใน Ubuntu

ดูเหมือนว่าค่าที่ตั้งใน /etc/rsyslog.d/50-default.conf จะมีความสำคัญมากกว่าสิ่งที่ตั้งค่าใน /etc/rsyslog.conf ดังนั้นจึงเป็นการดีกว่าที่จะทำการเปลี่ยนแปลงที่นั่นแล้วเริ่ม rsyslog และ cron ใหม่ มิฉะนั้นคุณจะยังคงจบลงด้วยพฤติกรรมเริ่มต้นของการบันทึก cron ไปยัง syslog รวมทั้งการบันทึก cron ไปยัง cronlog (แต่ไม่ใช่เฉพาะ)

คู่แรกของบรรทัดใน /etc/rsyslog.d/50-default.conf ของฉัน:

*.*;cron,auth,authpriv.none     -/var/log/syslog
cron.*                          /var/log/cron.log

และ voila!


1
คำตอบที่ดีมาก ที่กล่าวมาคุณอาจต้องการมุ่งเน้นไปที่คำถามที่ใหม่กว่าสำหรับการมีส่วนร่วมในอนาคตใน Stack Overflow เนื่องจากคำถามนี้เก่ามาก
Magellan

3

ฉันเพิ่งแก้ไขมันในวิธีที่แตกต่างกัน แต่เป้าหมายของฉันแตกต่างกันเล็กน้อย ฉันต้องการยกเลิกรายการบันทึก cron ที่ถูกสร้างขึ้นเมื่อ atrun ถูกไล่ออกเพื่อให้ฮาร์ดไดรฟ์ของฉันสามารถเข้าสู่โหมดสลีและไม่ต้องตื่นทุก 5 นาที

คุณสามารถมีเป้าหมายของบันทึกเหตุการณ์ใน syslog.conf เป็นคำสั่งเชลล์โดยใส่คำนำหน้าด้วยไพพ์และฉันจึงใช้ grep เพื่อทิ้งสิ่งที่ฉันไม่ต้องการ ดังนั้น:

cron.*              | grep -v "(/usr/libexec/atrun)" >> /var/log/cron.log

ฉันไม่ได้ตรวจสอบ แต่ฉันเชื่อว่าควรส่งรายการบันทึกเหล่านั้นไปยังเป้าหมายอื่นหากพวกเขายังต้องการ


3

ที่จริงแล้วทางออก 'ที่ดีที่สุด' (ใครจะเรียกร้อง) คือการรวมกันของสิ่งที่ @DaveCheney แนะนำและสิ่งที่ผู้ใช้ทำในที่สุด 7321 รวมถึงการกระทำที่สามที่ฉันอยากจะแนะนำ:

  1. การป้องกัน syslogd จากการต่อท้ายข้อความบันทึกที่เกี่ยวข้องกับ cron ไปยัง / var / log / syslog
  2. การทำให้มั่นใจได้ว่าข้อความบันทึก cron จะถูกบันทึกไว้ที่ใดที่หนึ่ง (โดยเฉพาะใน / var / log / cron) + ตรวจสอบให้แน่ใจว่ามีการหมุนเวียนบันทึกสำหรับบันทึก cron
  3. การป้องกัน syslogd จากการต่อท้ายข้อความบันทึกที่เกี่ยวข้องกับ cron ไปยัง / var / log / Messages เช่นกัน

ในของคุณ/etc/syslog.confการรวมกันของคำแนะนำเหล่านี้มีการเปลี่ยนแปลงบางอย่างดังต่อไปนี้:

*.*;cron,auth,authpriv.none                         -/var/log/syslog
auth,authpriv.none;daemon.none;mail,news.none       -/var/log/messages

เป็น:

cron.*                                              /var/log/cron.log
*.*;cron,auth,authpriv.none                         -/var/log/syslog
auth,authpriv.none;cron,daemon.none;mail,news.none  -/var/log/messages

และอย่าลืมบังคับให้โหลดซ้ำ (หรือรีสตาร์ท) ทั้งบริการ cron และ syslogd เช่นใช้:

/etc/init.d/syslogd force-reload
/etc/init.d/cron force-reload

หมายเหตุ: วิธีนี้ใช้ได้กับ rsyslogd เช่นกัน


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