Làm thế nào để logrotate xử lý các tập tin mở? Logrotate có thể xoay các tập tin mà một quá trình đã mở không?
Làm thế nào để logrotate xử lý các tập tin mở? Logrotate có thể xoay các tập tin mà một quá trình đã mở không?
Câu trả lời:
Đối với những ứng dụng không chấp nhận tín hiệu từ logrotate như Rory mô tả, tôi sử dụng một vài phương pháp.
Quyết định sử dụng cái nào phụ thuộc vào cả kích thước của tệp nhật ký và sự cần thiết của nhật ký liền mạch. Đó sẽ là một phân tích rủi ro từ phía bạn. Tuy nhiên, để đưa ra một ví dụ, tôi sử dụng khởi động lại sau xoay trên một số nhật ký nhất định mà tôi thực sự nên sử dụng một bản sao. Tuy nhiên, các tệp thường là một vài hợp đồng biểu diễn và bản sao có thể mất một thời gian đủ dài để mất một hoặc hai giây mỗi đêm là tốt hơn.
Có vẻ như tôi có thể muốn những điều sau đây, nhưng vẫn quan tâm đến chuyên môn của bất kỳ ai về chủ đề này:
copytruncate
Truncate the original log file to zero size in place after cre‐
ating a copy, instead of moving the old log file and optionally
creating a new one.
logrotate sẽ gửi tín hiệu chính xác đến quy trình để báo cho nó mở lại các tệp nhật ký. Nó hoạt động vượt trội cho những thứ như apache hoặc mysql.
Bạn có thể thấy điều này trong kịch bản postrotate cho apache. Nếu bạn có trình nền của riêng mình và bạn muốn logrotate hoạt động với nó, thì hãy chắc chắn rằng nó lắng nghe một tín hiệu nhất định và mở lại các tệp nhật ký.
Nếu bạn không thể thay đổi chương trình, thì bạn có thể xem liệu daemon có cách tự động xóa nhật ký hay không. Hoặc thêm một prerotate dừng máy chủ và postrotate khởi động lại nó.