Logrotate: Nhật ký không cần quay vòng tại sao?


57

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ư sau:

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? Điều tôi mong đợi là tệp nexus.log sẽ bị cắt bớt và một tệp mới, giống như nexus.log-201106241000, sẽ được tạo.


Ngoài ra, hãy nhớ rằng, khi bạn sử dụng tùy chọn -d, CNTT KHÔNG QUAY LẠI Nhật ký. Nó cho bạn thấy những gì nó sẽ làm nó chạy mà không có tùy chọn, như một kế hoạch trò chơi. Khiến tôi đau đầu nghiêm trọng khi tôi nghĩ rằng tôi có thể thấy chúng quay, và rồi chúng vẫn ở đó.
Maxwell Flanders

Câu trả lời:


64

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 -fnó 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 thức tương tác với nó -d).

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


4
Trong FreeBSD nó /var/run/logrotate.status
kaleissin

Đồng thời kiểm tra khả năng sử dụng đối số -s trong lời gọi cho vị trí tệp trạng thái
JGurtz

2
-d+ -flàm cho báo cáo logrotate "cần xoay" cho tất cả các tệp, ngay cả những tệp không khớp
Fluffy

Để thêm vào điều này, chỉnh sửa ngày trong tệp trạng thái cũ hơn chính sách xoay vòng là đủ để thuyết phục logrotatenó cần xoay nhật ký khi chạy lại.
Centimane

Trên CentOS, tôi đã sửa đổi /var/lib/logrotate.status để logrotate hoạt động. Như được chỉ định bởi EightBitTony, logrotate hàng ngày sẽ ghi nhớ lịch sử. Trừ khi tập tin đã có trong lịch sử với một ngày trong quá khứ, logrotate sẽ không xoay tập tin.
Đánh dấu

58

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 vào /var/lib/logrotate/statushiệ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


5

Đô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ó dateextgiá 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 điều này, bạn cần sử dụng dateformatthay vì dateext, với một giá trị như : %Y%m%d%s.

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


1

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 lại /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
Tôi không thể sao chép nó trên Ubuntu (16.04 và 17.04). Nếu "/var/lib/logrotate.status" được sử dụng, bạn phải sử dụng một bản phân phối khác. Ubuntu đăng nhập vào "/ var / lib / logrotate / status".
Philipp Claßen

2
@Philipp Claßen: Bạn đã đúng (tệp trạng thái được đặt tại /var/lib/logrotate.status) đã được quan sát trong khi gỡ lỗi cấu hình của Logrotate 3.10 trên Alpine linux 3.5 trong một thùng chứa docker. Nhưng không có cờ Ubuntu trong định nghĩa câu hỏi, phải không?
trực thăng

1
Vâng, không sao đâu. Tôi chỉ đề cập đến nó vì Ubuntu rất phổ biến. Tôi giả sử nhiều người đọc câu hỏi này vì họ muốn sửa máy chủ của họ, ngày nay thường chạy với Ubuntu.
Philipp Claßen

1
Ồ đúng rồi. Để hoàn tất, tôi có thể thêm rằng vị trí của tệp trạng thái tại bản phân phối Centos 7 là tại/var/lib/logrotate/logrotate.status
helvete
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.