it-swarm-vi.com

Logrotate: "log không cần quay" tại sao?

Tôi có cấu hình logrotate mới sau đây:

/var/log/nexus/nexus.log {
    rotate 7
    missingok
    compress
    delaycompress
    copytruncate
    daily
}

Khi tôi chạy logrotate -d nexus, Tôi nhận được những điều sau đây:

reading config file nexus
reading config info for /var/log/nexus/nexus.log

Handling 1 logs

rotating pattern: /var/log/nexus/nexus.log  after 1 days (7 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/nexus/nexus.log
  log does not need rotating

Thư mục/var/log/nexus/của tôi chứa các mục sau:

nexus.log
oldlogs.tar.gz

Tại sao LogRotate không quay tệp nexus.log? Những gì tôi đã mong đợi là tệp nexus.log sẽ bị cắt ngắn và một tệp mới, giống như nexus.log-201106241000, sẽ được tạo.

60
Rich

Nhiều khả năng, tệp nhật ký chưa đầy một ngày và/hoặc đã được xoay trong ngày cuối cùng và logrotate ghi nhớ lịch sử.

Nếu bạn thêm -f nó sẽ buộc một vòng quay nếu bạn thực sự muốn (mặc dù không chắc chắn 100% cách nó tương tác với -d).

Bạn có thể nhìn vào lịch sử, vị trí tùy thuộc vào phân phối của bạn, nhưng có thể là /var/lib/logrotate/status. Tập tin đó hiển thị khi nhật ký được quay lần cuối.

68
EightBitTony

Lần đầu tiên bạn chạy logrotate với cấu hình nhật ký mới, nó không biết khi nào vòng quay nhật ký cuối cùng xảy ra, vì vậy nó chỉ ghi một dòng trạng thái trong /var/lib/logrotate/status với hiệu ứng mà nó đã được chạy ngày hôm nay.

Khi sau đó nó chạy vào ngày hôm sau, nó thấy rằng nhật ký là một ngày cũ và xoay nó như mong đợi. Nếu bạn không muốn chờ đợi, hãy chỉnh sửa tệp trạng thái của logrotate và lấy ngày trạng thái cho nhật ký của bạn trở lại ngày hôm trước.

Khi bạn chạy logrotate thủ công, nó sẽ hoạt động như mong đợi

61
Tony Sweeney

Đôi khi ngay cả khi bạn chạy logrotate thủ công, điều này sẽ không hoạt động nếu bạn thực hiện cùng ngày và có dateext trong đó giá trị mặc định không bao gồm senconds (ví dụ: -%Y%m%d). Ngay cả khi bạn sửa đổi tệp trạng thái của logrotate hoặc khi sử dụng chỉ thị kích thước (ví dụ: size 200M). Ít nhất là trên CentOS 6, logrotate sẽ không thể xoay tệp nhật ký của bạn vì nó đã tồn tại.

Để giải quyết vấn đề này, bạn cần sử dụng dateformat thay vì dateext, với giá trị như: %Y%m%d%s.

Xem man logrotate để biết thêm thông tin.

5
emerino

Coi chừng đó bằng cách chạy

logrotate -vdf /etc/logrotate.conf

sự kiện mặc dù chỉ mô phỏng sẽ được ghi vào /var/lib/logrotate.status và các lần chạy logrotate tiếp theo sẽ trả lời với đề cập

log does not need rotating
1
helvete