Logrotate xóa các tệp theo thứ tự trong danh sách được sắp xếp từ vựng gồm các tên tệp nhật ký được xoay vòng, và cả theo tuổi của tệp (sử dụng thời gian sửa đổi cuối cùng của tệp)
-
xoay là số lượng tệp được xoay tối đa, bạn có thể tìm thấy. Nếu có số lượng tệp nhật ký được xoay nhiều hơn, tên của chúng sẽ được sắp xếp theo từ vựng và những tệp nhỏ nhất về mặt từ vựng sẽ bị loại bỏ.
-
tối đa xác định một tiêu chí khác để xóa các tệp nhật ký đã xoay. Mọi tệp nhật ký đã xoay, cũ hơn số ngày nhất định sẽ bị xóa. Lưu ý rằng ngày được phát hiện từ lần sửa đổi cuối cùng của tệp, không phải từ tên tệp.
-
định dạng ngày cho phép định dạng cụ thể cho ngày tháng trong các tệp được xoay. Trang người đàn ông lưu ý rằng định dạng sẽ dẫn đến việc sắp xếp chính xác về mặt từ vựng .
-
ngày hôm qua cho phép sử dụng ngày tháng trong tên tệp nhật ký vào một ngày trước đó.
Để giữ số ngày nhất định trong các tệp được xoay vòng hàng ngày (ví dụ:7), bạn phải đặt rotate
đến giá trị 7 và bạn có thể bỏ qua maxage
, nếu các tệp của bạn được tạo và xoay vòng thực sự hàng ngày.
Nếu quá trình tạo nhật ký không diễn ra trong vài ngày, ví dụ:trong 14 ngày, số tệp nhật ký đã xoay sẽ vẫn như cũ (7).
maxage
sẽ cải thiện tình hình trong các kịch bản "nhật ký không được tạo" bằng cách luôn xóa các tệp quá cũ. Sau 7 ngày không sản xuất nhật ký, sẽ không có tệp nhật ký được xoay vòng nào.
Bạn không thể sử dụng dateformat
như OP cho thấy, vì nó không thể sắp xếp từ vựng. Lộn xộn với dateformat
có thể sẽ dẫn đến việc xóa các tệp nhật ký xoay vòng khác mà bạn thực sự muốn.
Mẹo :Chạy logrotate từ dòng lệnh với -d
tùy chọn để thực hiện chạy khô:bạn sẽ thấy những gì logrotate sẽ làm nhưng không thực sự làm bất cứ điều gì. Sau đó, thực hiện chạy thủ công bằng -v
(dài dòng) để bạn có thể xác nhận rằng những gì được thực hiện là những gì bạn muốn.
Giải pháp:nhật ký sạch được tạo bởi cron
Khái niệm là:
Cho phép cron tạo và cập nhật tệp nhật ký, nhưng thực hiện sửa đổi nhỏ để tạo tệp, tuân theo tên tệp chuẩn logrotate khi sử dụng dateext
mặc định
/data/tier2/scripts/logs/recover_standby_SID.log-`date +\%Y\%m\%d`.log
Chỉ sử dụng logrotate để xóa các tệp nhật ký quá cũ
- nhắm vào tệp nhật ký không hiện có
/data/tier2/scripts/logs/recover_standby_SID.log
- sử dụng
missingok
để việc dọn dẹp logrotate diễn ra - đặt
rotate
đủ cao để bao gồm số lượng tệp nhật ký cần lưu giữ (ít nhất 7 tệp, nếu sẽ có một tệp nhật ký "xoay" mỗi ngày, nhưng bạn có thể an toàn đặt nó rất cao như 9999) - đặt
maxage
thành 7. Thao tác này sẽ xóa các tệp có thời gian sửa đổi lần cuối cao hơn 7 ngày. -
dateext
được sử dụng chỉ để đảm bảo, xoay vòng các tìm kiếm cho các tệp cũ hơn trông giống như được xoay vòng.
Tệp cấu hình logrotate sẽ giống như sau:
data/tier2/scripts/logs/recover_standby_SID.log {
daily
missingok
rotate 9999
maxage 7
dateext
}
Giải pháp:xoay trực tiếp bằng logrotate mỗi ngày một lần
Tôi không rõ, tệp dự phòng khôi phục nguồn được tạo như thế nào, nhưng tôi sẽ giả sử rằng Oracle hoặc một số tập lệnh của bạn thường xuyên hoặc liên tục thêm vào một tệp /data/tier2/scripts/logs/recover_standby_SID.log
Khái niệm là:
- xoay tệp mỗi ngày một lần bằng
logrotate
- làm việc trực tiếp với tệp nhật ký chứa dữ liệu khôi phục
/data/tier2/scripts/logs/recover_standby_SID.log
-
daily
sẽ gây ra xoay vòng mỗi ngày một lần (về cách thứccron
hiểudaily
) -
rotate
phải được đặt thành 7 (hoặc bất kỳ số nào cao hơn). -
maxage
đặt thành 7 (ngày) -
dateext
để sử dụng hậu tố ngày logrotate mặc định -
dateyesterday
được sử dụng để tạo ra các hậu tố ngày tháng trong các tệp được xoay vòng là một ngày trở lại. -
missingok
để làm sạch các tệp cũ hơn ngay cả khi không có nội dung mới để xoay.
Cấu hình logrotate sẽ giống như sau:
data/tier2/scripts/logs/recover_standby_SID.log {
daily
missingok
rotate 7
maxage 7
dateext
dateyesterday
}
Lưu ý rằng bạn có thể cần chơi một chút với copytruncate
và các tùy chọn tương tự khác liên quan đến cách tệp nhật ký nguồn được tạo bởi quy trình bên ngoài và cách nó phản ứng với hành động xoay vòng.