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


30

Đánh giá theo dấu thời gian trên các hệ thống của tôi, logrotate thực hiện luân chuyển nhật ký hàng ngày khi logrotate được chạy bằng cron. Tuy nhiên, nếu tôi chạy nó sớm hơn thì nó sẽ không xoay các tệp. Làm thế nào để logrotate biết có nên xoay chúng hay không, nó có giữ lịch sử hoặc có thể sử dụng dấu thời gian không?

Câu trả lời:


32

Tôi tin rằng đó là nội dung của tập tin nhà nước, đó là trường hợp của tôi /var/lib/logrotate.status. 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 một ngày mà một tệp đã cho là do quay, đượ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 sẽ được xoay.

logrotate dường như không quan tâm vào thời gian nào trong ngày nó chạy; ngay cả khi nó thường chạy ở 2355, nếu bạn chạy nó vào lúc 01 giờ 30, nó vẫn sẽ xoay các tệp được đánh dấu hàng ngày và được thực hiện lần cuối ngày hôm qua; nhưng đã làm như vậy nó sẽ đưa ngày hôm nay vào tệp trạng thái (đối với bất kỳ tệp được xoay nào), do đó, lần chạy thứ hai ở 2355 sẽ không làm gì cả.


1
Hmm .. Vì vậy, nó chỉ xoay nếu: ngày hiện tại> ngày trong /var/lib/logrotate/status(như tập tin trong trường hợp của tôi).
Kyle Brandt

2
Tôi nghĩ rằng nó chỉ làm bất cứ điều gì nếu 24 giờ trôi qua kể từ lần chạy cuối cùng, nó hoạt động bằng cách kiểm tra thời gian của tệp trạng thái. Khi đã quyết định cả ngày trôi qua và nó có thể làm bất cứ điều gì hợp pháp, nó đưa ra quyết định HÀNG NGÀY, HÀNG TUẦN, vv dựa trên các trường ngày trong tệp.
MadHatter hỗ trợ Monica

4
Vâng, nó dường như sử dụng ngày trong tập tin đó. Tôi đặt ngày một ngày trở lại trong tệp trạng thái và chạy nó ... nó xoay vòng ..
Kyle Brandt

Vừa quay lại và chọc vào logrotate của tôi, tôi nghĩ rằng tôi đã sai và những gì bạn viết ở trên là đúng. Nó quyết định nếu nó đã được chạy ngày hôm nay bằng cách xem dấu thời gian của tệp trạng thái; nếu không, nó tiến hành trích xuất ngày quay cuối cùng từ tệp trạng thái và hành động tương ứng. Tôi chỉ nói dối để logrotate với vi và chạm -t để thuyết phục nó rằng nó đã chạy lần cuối vào lúc 2355 ngày hôm qua, khi nó xoay vòng khúc gỗ munin của tôi. Chạy lại nó, mặc dù chưa đến 24 giờ, nó đã xoay chúng ra và cập nhật tệp trạng thái tương ứng.
MadHatter hỗ trợ Monica

Tôi đã cập nhật câu trả lời cho sự hiểu biết hiện tại của mình, đưa ra bộ thử nghiệm tôi vừa chạy (cắt khúc gỗ munin của tôi tám cách từ chủ nhật, nhưng ai quan tâm chứ!).
MadHatter hỗ trợ Monica

11

Từ trang man logrotate:

Thông thường, logrotate được chạy như một công việc định kỳ hàng ngày. Nó sẽ không sửa đổi nhật ký nhiều hơn một lần trong một ngày trừ khi tiêu chí cho nhật ký đó dựa trên kích thước của nhật ký và logrotate đang được chạy nhiều hơn một lần mỗi ngày hoặc trừ khi sử dụng tùy chọn -f hoặc -force.


1
để xem khi nào cron.d Daily chạy ở đây .
Trevor Boyd Smith
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.