logrotate không quay các bản ghi


24

Tôi có cấu hình logrotate này và tôi đang chạy trên 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

}

Tôi đã đặt cái này trong /etc/logrotate.d ngày hôm qua và hôm nay nhật ký không được xoay.

Dưới đây là những điều mà tôi đã làm:

  1. Tôi đã xác minh rằng nhật ký thực sự nằm trong /var/log/mysql/mysql-slow.log
  2. dòng mysqladmin hoạt động tốt khi chạy bằng root
  3. mysql có thể ghi vào mysql-Slow.log

Khi tôi làm điều này:

$ 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. Nhật ký cho thấy logrotate đã thành công ở đâu? Tôi muốn xem nếu có bất cứ điều gì sẽ nói rằng có một vấn đề.
  2. Bất kỳ ý tưởng về lý do tại sao logrotate không hoạt động?

Vì vậy, nó không hoạt động khi thực hiện bằng tay? Đang crondchạy à?
Kyle Smith

vâng, nó hoạt động, nếu bạn có nghĩa là logrotate -f mysql_slow_query. Và crond đang chạy.
Carmen

Bạn có chắc chắn không có cấu hình nào khác được cho là xử lý tệp nhật ký đó không? Có lẽ mysql-server? Chạy đi grep '/var/log/mysql' /etc/logrotate.d/*.
Zoredache

Tôi đã chạy lệnh đó và chỉ có cấu hình của tôi hiển thị như đang làm gì đó trong / var / log / mysql
Carmen

Các công việc định kỳ hàng ngày chạy trong thiết lập Ubuntu của bạn vào thời gian nào trong ngày? Bạn có thể tìm thấy thông tin đó trong /etc/crontabtệp, trong dòng kết thúc bằng /etc/cron.daily ). Có lẽ bạn đã tạo cấu hình logrotate sau khi các công việc hàng ngày của cron cho ngày đó đã chạy?
ricmarques

Câu trả lời:


47

Một vấn đề phổ biến là khi bạn lần đầu tiên thiết lập mục nhập logrotate.d hàng ngày, nó sẽ không xoay vòng vào ngày đầu tiên. Khi bạn sử dụng phép quay vòng dựa trên thời gian (hàng ngày / hàng tuần / hàng tháng), hãy viết nguệch ngoạc một dấu ngày của ngày cuối cùng, nó nhìn thấy tệp trong /var/lib/logrotate/status(hoặc /var/lib/logrotate.statustrên các hệ thống RHEL).

Ngày viết nguệch ngoạc trở thành ngày tham chiếu từ các lần chạy trong tương lai logrotatesẽ sử dụng để so sánh các phép quay 'hàng ngày'. Vì công việc định kỳ mặc định chạy hàng ngày, nên điều này thường chỉ là một vấn đề trong công việc hàng ngày.

Bạn có thể tránh vấn đề này theo hai cách;

  1. chạy sudo logrotate -f /etc/logrotate.d/<my rotate job>

    • Điều này sẽ viết nguệch ngoạc ngày vào tệp trạng thái và xoay vòng nhật ký

  2. Chỉnh sửa /var/lib/logrotate/statusvà thêm dòng thủ công:

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

    • thiết lập nó cho ngày hôm nay hoặc một ngày trước. Lần chạy tiếp theo sẽ khiến nó chạy.

Hoạt động như một nhà vô địch!
Seth

6
Trên thực tế nó không xoay các bản ghi khi sử dụng -f(ít nhất là trên phái sinh RH của tôi).
bufh

12
-fđối với Force Rotation, -dđối với Debug, cũng gỡ lỗi ngụ ý chạy khô nên sẽ không có thay đổi nào thực sự được thực hiện trong khi -dđang bật.
ThorSummoner

1
-dngụ ý chạy khô là một khó khăn. Không có thay đổi nào được thực hiện, và tôi đã gãi đầu cho đến khi tôi nhận ra sự thật này.
Artem Russakovskii

5

Theo bài viết Slicehost sau đây:

Tìm hiểu về logrotate trên Ubuntu - phần 2 http://articles.slicehost.com/2010/6/30/under Hiểu-logrotate-on-Ubuntu-part-2

... /var/lib/logrotate/statusTệp " lưu trữ thông tin về lần cuối cùng xoay từng tệp nhật ký. ". Trang quản lý logrotate nói rằng được gọi là "tệp trạng thái".

Có một cuộc thảo luận khác ở đây trong ServerFault cũng có thể hữu ích:

Làm thế nào để logrotate xử lý chính xác "hàng ngày"?

Trong cuộc thảo luận đó, "MadHatter" nói, liên quan đến các vấn đề sau, liên quan đến tệp "trạng thái" (trạng thái):

"Mỗi tệp có một dòng, đó là ngày mà nó được xoay lần cuối; nếu bạn chạy logrotate vào ngày mà một tệp đã cho là do quay vòng, được đưa ra số ngày giữa ngày hiện tại và ngày trong tệp ( 1 cho hàng ngày, 7 cho hàng tuần, v.v.), tập tin sẽ được xoay. "

Tôi hi vọng cái này giúp được.


0

Nếu mysqladminyêu cầu người dùng hoặc mật khẩu, nó sẽ không đọc nó từ /root/.my.cnfcấu hình mà không sửa đổi.

Hãy thử đường ống đầu ra của bạn để logger để xem những gì đang xảy ra.

  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 không ghi lỗi vào tập tin mới sau khi xoay?

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.