logrotate: วิธีกำหนดค่าและแทนที่ค่าเริ่มต้น


3

ผมทดสอบการกำหนดค่า logrotate /tmpใน ฉันต้องการ

  1. เพื่อกำหนดค่านโยบายการ/tmp/*.logบันทึกเริ่มต้นสำหรับไฟล์โดยใช้ไฟล์ทดสอบการกำหนดค่าของฉัน/tmp/logrotate.conf
  2. ในการจัดการไฟล์บันทึกเฉพาะ/tmp/special.logด้วยนโยบายที่แตกต่างกันซึ่งกำหนดค่าไว้ในไฟล์ทดสอบการกำหนดค่า logrotate แยก:/tmp/logrotate.d/included

แต่การตอบสนองของ logrotate ต่อการตั้งค่าของฉันคือการพูด

error: /tmp/logrotate.d/included:1 duplicate log entry for /tmp/special.log

ฉันควรทำอย่างไรแตกต่าง

นี่คือฉัน /tmp/logrotate.conf

compress
missingok
notifempty
size 512k
copytruncate
rotate 2
su

# here's my attempt at applying the default policy to all /tmp/*.log
/tmp/*.log {}

# and here I intend to include any overrides
include /tmp/logrotate.d/included

และนี่คือ /tmp/logrotate.d/included

/tmp/special.log {
    size 300
}

นี่คือผลลัพธ์การดีบัก

$ sudo logrotate -d ./logrotate.conf

reading config file ./logrotate.conf
including /tmp/logrotate.d/included
reading config file /tmp/logrotate.d/included
error: /tmp/logrotate.d/included:1 duplicate log entry for /tmp/special.log

Handling 2 logs

rotating pattern: /tmp/*.log  524288 bytes (2 rotations)
empty log files are not rotated, old logs are removed
considering log /tmp/normal.log
  log does not need rotating
considering log /tmp/special.log
  log does not need rotating

rotating pattern: /tmp/special.log  300 bytes (2 rotations)
empty log files are not rotated, old logs are removed
No logs found. Rotation not needed.
  1. ข้อผิดพลาดทำให้ฉันประหลาดใจเพราะฉันคิดว่าตามหน้า man "ไฟล์ config ในภายหลังอาจแทนที่ตัวเลือกที่ให้ไว้ในไฟล์ก่อนหน้าดังนั้นลำดับที่แสดงไฟล์กำหนดค่า logrotate มีความสำคัญ"
  2. ทำไมถึงพูดตอนท้ายเมื่อจัดการรูปแบบ/tmp/special.logที่ไม่พบบันทึก ไฟล์/tmp/special.logมีอยู่และมีขนาดใหญ่กว่า 300 ไบต์

เป็นไฟล์ปรับแต่งของคุณใช่หรือไม่/tmp/logrotate.dคุณแค่ทดสอบจากที่นั่น/etc/logrotate.dใช่ไหม คุณสามารถโพสต์คำสั่งที่คุณใช้เมื่อคุณทำการทดสอบได้หรือไม่?
javabrett

ฉันแค่ทดสอบ/tmpค่ะ ด้วยไดเร็กทอรีการทำงานปัจจุบันของ/tmpฉันรันคำสั่งนี้: sudo logrotate -d ./logrotate.conf <ประโยคต่อไปนี้:> normal.logและspecial.logเป็นของฉัน logrotate.confและlogrotated.d/includedเป็นเจ้าของโดย root เพราะเมื่อทุกอย่างเป็นของฉันมีปัญหาสิทธิ์ในการเปลี่ยนคุณสมบัติบางอย่างในขณะที่ logrotate กำลังทำงานอยู่
user1011471

ปัญหาการอนุญาต (เมื่อทุกอย่างเป็นของฉันและเรียกใช้ไม่ใช่ sudo) คือ:switching euid to 0 and egid to 0 ... error: error switching euid to 0 and egid to 0: Operation not permitted
user1011471

คำตอบ:


1

นักพัฒนาของlogrotateมีคำจำกัดความของไฟล์ล็อกที่ทับซ้อนกันโดยเจตนาห้ามดังนั้นในขณะที่กฎที่เฉพาะเจาะจงมากขึ้นได้รับอนุญาตให้ปฏิบัติตามกฎทั่วไปในการกำหนดค่าเส้นทางของไฟล์ล็อกซ้อนทับยังคงสร้างข้อผิดพลาด นี่เป็นส่วนหนึ่งเพื่อประโยชน์ของผู้ดูแลแพคเกจซึ่งรวมถึงกฎการ logrotate และผู้ใช้ของแพ็คเกจเหล่านั้นเพื่อให้การซ้อนทับชัดเจนและสามารถรายงานได้

หากไฟล์บันทึกกฎเฉพาะและกฎทั่วไปต้องอยู่ในไดเรกทอรีเดียวกัน (คุณสามารถกำหนดค่าใหม่ให้ย้ายไฟล์ได้หรือไม่) จากนั้นคุณต้องสร้างและรักษาการยกเว้นอย่างชัดเจนให้กับกฎทั่วไปสำหรับแต่ละเส้นทางที่ทับซ้อนกัน logrotate.confไม่ได้จัดเตรียมไว้สำหรับสิ่งนี้อย่างชัดเจน แต่หากการlogrotateเรียกใช้ของคุณในสภาพแวดล้อมที่extglobเปิดใช้งานส่วนขยายเชลล์glob นั้นการแยกอาจเป็นไปได้ คุณสามารถตรวจสอบว่าextglobมีการใช้งานโดยการทำงานshopt extglobในสภาพแวดล้อมรากเดียวกัน logrotate crontab ของคุณจะทำงานและจะสามารถเปิดใช้งานอย่างชัดเจน (ถ้าจำเป็น) shopt -s extglobด้วย

เมื่อextglobเปิดใช้งานแล้วจะอนุญาตการสร้างเช่น:

/tmp/!(special).log {}

... ซึ่งจะป้องกันการทับซ้อนกับกฎในภายหลังที่เฉพาะเจาะจงมากขึ้นของคุณหลีกเลี่ยงข้อผิดพลาด

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