logrotate ไม่หมุนบันทึก


24

ฉันมีการกำหนดค่า logrotate นี้และฉันใช้งานบน Ubuntu 10.04

/var/log/mysql/mysql-slow.log {
    daily
    rotate 3
    compress
    notifempty
    missingok
    create 660 mysql adm
    postrotate 
    if test -x /usr/bin/mysqladmin && \
       /usr/bin/mysqladmin  ping &>/dev/null
    then
       /usr/bin/mysqladmin  flush-logs
    fi
endscript

}

ฉันใส่มันลงใน /etc/logrotate.d เมื่อวานนี้และวันนี้บันทึกไม่ได้หมุน

ด้านล่างนี้คือสิ่งที่ฉันได้ทำ:

  1. ฉันยืนยันว่าบันทึกนั้นอยู่ใน /var/log/mysql/mysql-slow.log
  2. บรรทัด mysqladmin ทำงานได้ดีเมื่อทำงานในฐานะรูท
  3. mysql สามารถเขียนไปยัง mysql-slow.log

เมื่อฉันทำสิ่งนี้:

$ logrotate -d -f mysql-slow

reading config file mysql-slow
reading config info for /var/log/mysql/mysql-slow.log 

Handling 1 logs

rotating pattern: /var/log/mysql/mysql-slow.log  forced from command line (3 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/mysql/mysql-slow.log

log needs rotating
rotating log /var/log/mysql/mysql-slow.log, log->rotateCount is 3
dateext suffix '-20120329'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
renaming /var/log/mysql/mysql-slow.log.3.gz to /var/log/mysql/mysql-slow.log.4.gz     (rotatecount 3, logstart 1, i 3), 
renaming /var/log/mysql/mysql-slow.log.2.gz to /var/log/mysql/mysql-slow.log.3.gz (rotatecount 3, logstart 1, i 2), 
renaming /var/log/mysql/mysql-slow.log.1.gz to /var/log/mysql/mysql-slow.log.2.gz (rotatecount 3, logstart 1, i 1), 
renaming /var/log/mysql/mysql-slow.log.0.gz to /var/log/mysql/mysql-slow.log.1.gz (rotatecount 3, logstart 1, i 0), 
renaming /var/log/mysql/mysql-slow.log to /var/log/mysql/mysql-slow.log.1
creating new /var/log/mysql/mysql-slow.log mode = 0660 uid = 20004 gid = 4
running postrotate script
running script (multiple) with arg /var/log/mysql/mysql-slow.log : " 
    if test -x /usr/bin/mysqladmin && \
       /usr/bin/mysqladmin &>/dev/null
    then
       /usr/bin/mysqladmin flush-logs
    fi
"
compressing log with: /bin/gzip
removing old log /var/log/mysql/mysql-slow.log.4.gz
  1. บันทึกที่แสดงว่า logrotate สำเร็จหรือไม่ ฉันต้องการดูว่ามีอะไรที่จะบอกว่ามีปัญหาหรือไม่
  2. ความคิดเห็นใด ๆ เกี่ยวกับสาเหตุที่ logrotate ไม่ทำงาน

ดังนั้นมันจะทำงานเมื่อดำเนินการด้วยมือ? มีการcrondทำงานอยู่หรือไม่
Kyle Smith

ใช่มันใช้งานได้ถ้าคุณหมายถึง logrotate -f mysql_slow_query และ crond กำลังทำงานอยู่
Carmen

คุณแน่ใจหรือไม่ว่ายังไม่มีการกำหนดค่าอื่นที่ควรจัดการกับไฟล์บันทึกนั้น อาจจะmysql-server? grep '/var/log/mysql' /etc/logrotate.d/*วิ่ง
Zoredache

ฉันรันคำสั่งนั้นและมีเพียง config ของฉันเท่านั้นที่แสดงว่าทำอะไรใน / var / log / mysql
Carmen

งาน cron รายวันทำงานในเวลาใดในการตั้งค่า Ubuntu ของคุณ คุณอาจพบว่าข้อมูลที่อยู่ในไฟล์ในบรรทัดที่ลงท้ายด้วย/etc/crontab /etc/cron.daily )บางทีคุณอาจสร้างการตั้งค่า logrotate หลังจากงาน cron รายวันสำหรับวันนั้นทำงานไปแล้ว?
ricmarques

คำตอบ:


47

ปัญหาที่พบบ่อยคือเมื่อคุณตั้งค่ารายการ logrotate.d รายวันครั้งแรกมันจะไม่หมุนในวันแรก เมื่อคุณใช้การหมุนตามเวลา (รายวัน / รายสัปดาห์ / รายเดือน) จะทำการขีดเขียนบันทึกวันที่วันสุดท้ายที่เห็นไฟล์ใน/var/lib/logrotate/status(หรือ/var/lib/logrotate.statusในระบบ RHEL)

วันที่เขียนกลายเป็นวันที่อ้างอิงจากการดำเนินการในอนาคตlogrotateนั้นจะใช้เพื่อเปรียบเทียบการหมุน 'รายวัน' เนื่องจากงาน cron เริ่มต้นทำงานทุกวันนี่เป็นเพียงปัญหาในงานรายวันเท่านั้น

คุณสามารถหลีกเลี่ยงปัญหานี้ได้สองวิธี;

  1. วิ่ง sudo logrotate -f /etc/logrotate.d/<my rotate job>

    • วิธีนี้จะเขียนวันที่เป็นไฟล์สถานะและหมุนบันทึก

  2. แก้ไข/var/lib/logrotate/statusและเพิ่มบรรทัดด้วยตนเอง:

    "/var/log/my_special.log" 2013-4-8

    • ตั้งเป็นวันนี้หรือวันที่ก่อนหน้า การเรียกใช้ครั้งต่อไปควรทำให้เกิดการเรียกใช้

ทำงานเหมือนแชมป์!
เซท

6
จริงๆแล้วมันจะหมุนบันทึกเมื่อใช้-f(อย่างน้อยในอนุพันธ์ RH ของฉัน)
bufh

12
-fสำหรับการหมุนแบบบังคับ-dสำหรับการดีบั๊กการดีบักหมายถึงการรันแบบแห้งดังนั้นจะไม่มีการเปลี่ยนแปลงใด ๆ ในขณะที่-dเปิดอยู่
ThorSummoner

1
-dหมายถึงการวิ่งแห้งเป็นเรื่องยาก ไม่มีการเปลี่ยนแปลงใด ๆ และให้ฉันเกาหัวจนกว่าฉันจะได้ตระหนักถึงความจริงข้อนี้
Artem Russakovskii

5

อ้างอิงจากบทความ Slicehost ต่อไปนี้:

ทำความเข้าใจกับ logrotate บน Ubuntu - ตอนที่ 2
http://articles.slicehost.com/2010/6/30/understanding-logrotate-on-ubuntu-part-2

... /var/lib/logrotate/statusไฟล์ " เก็บข้อมูลเกี่ยวกับเมื่อมันหมุนแต่ละไฟล์บันทึก ". manpage logrotateบอกว่าจะเรียกว่า "แฟ้มของรัฐ"

มีการสนทนาอื่นที่นี่ใน ServerFault ซึ่งอาจมีประโยชน์:

logrotate จัดการกับ "ทุกวัน" ได้อย่างไร?

ในการสนทนานั้น "MadHatter" กล่าวเกี่ยวกับสิ่งต่อไปนี้เกี่ยวกับไฟล์ "สถานะ" (รัฐ):

"แต่ละไฟล์มีหนึ่งบรรทัดซึ่งเป็นวันที่ซึ่งถูกหมุนครั้งล่าสุดหากคุณเรียกใช้ logrotate ในวันที่ไฟล์ที่กำหนดครบกำหนดสำหรับการหมุนให้กำหนดจำนวนวันระหว่างวันที่ปัจจุบันและวันที่ในไฟล์ ( 1 สำหรับรายวัน 7 ต่อสัปดาห์และอื่น ๆ ) ไฟล์จะถูกหมุน "

ฉันหวังว่านี่จะช่วยได้.


0

หากmysqladminต้องการผู้ใช้หรือรหัสผ่านมันจะไม่อ่านจาก/root/.my.cnfการกำหนดค่าโดยไม่มีการดัดแปลง

ลองใช้ท่อส่งออกของคุณเพื่อคนตัดไม้เพื่อดูสิ่งที่เกิดขึ้น

  postrotate
      # just if mysqld is really running
      if test -x /usr/bin/mysqladmin && \
         /usr/bin/mysqladmin ping &>/dev/null
      then
         env HOME=/root/ /usr/bin/mysqladmin flush-logs 2>&1 | logger
      else
         logger "mysqladmin ping failed so not rotating mysql logs"
      fi
  endscript

MySQL ไม่บันทึกข้อผิดพลาดไปยังไฟล์ใหม่หลังจากหมุน?

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