Có thể logrotate
xem xét các logfiles trong một thư mục và tất cả các thư mục con của nó không? (tức là không liệt kê rõ ràng các thư mục con.)
Có thể logrotate
xem xét các logfiles trong một thư mục và tất cả các thư mục con của nó không? (tức là không liệt kê rõ ràng các thư mục con.)
Câu trả lời:
Làm thế nào sâu thư mục con của bạn đi?
/var/log/basedir/*.log /var/log/basedir/*/*.log {
daily
rotate 5
}
Sẽ xoay tất cả các tệp .log trong dựa trên / cũng như tất cả các tệp .log trong bất kỳ con trực tiếp nào của dựa trên. Nếu bạn cũng cần phải đi sâu hơn 1 cấp, chỉ cần thêm một cấp độ khác /var/log/basedir/*/*/*.log
cho đến khi bạn có mỗi cấp độ được bảo hiểm.
Điều này có thể được kiểm tra bằng cách sử dụng tệp cấu hình logrotate riêng có chứa một ràng buộc sẽ không được đáp ứng (kích thước cao) và sau đó chạy nhật ký tự xoay trong chế độ dài dòng
logrotate -d testconfig.conf
cờ -d sẽ liệt kê từng tệp nhật ký mà nó đang xem xét để xoay.
-f
tùy chọn bảo logrotate để "lực lượng chạy". một từ trống ở cuối lệnh là một tệp cấu hình để sử dụng thay vì mặc định. vì vậy logrotate -f /some/config
có nghĩa là chạy với tệp cấu hình đó và luôn chạy ngay cả khi tệp cấu hình cho biết chưa đến lúc chạy. Đối với đôi mắt chưa được huấn luyện của tôi và người tiền nhiệm của tôi, người đã thực hiện một công việc định kỳ với điều đó, có vẻ như -f
chỉ là chỉ định tệp cấu hình. Hơi bối rối.
Trong trường hợp của tôi, độ sâu của thư mục con có thể thay đổi mà không có cảnh báo, vì vậy tôi đã thiết lập một tập lệnh bash để tìm tất cả các thư mục con và tạo một mục cấu hình cho mỗi thư mục.
Điều quan trọng đối với tôi là giữ cấu trúc của các thư mục con sau khi xoay, điều mà các ký tự đại diện (tức là câu trả lời của @ DanR) dường như không làm được. Nếu bạn đang thực hiện luân chuyển nhật ký hàng ngày, bạn có thể đặt tập lệnh này vào công việc định kỳ hàng ngày.
basedir=/var/log/basedir/
#destdir=${basedir} # if you want rotated files in the same directories
destdir=/var/log/archivedir/ #if you want rotated files somewhere else
config_file=/wherever/you/keep/it
> ${config_file} #clear existing config_file contents
subfolders = $(find ${basedir} -type d)
for ii in ${subfolders}
do
jj=${ii:${#basedir}} #strip off basedir, jj is the relative path
#append new entry to config_file
echo "${basedir}${jj}/* {
olddir ${destdir}${jj}/
daily
rotate 5
}" >> ${config_file}
#add one line as spacing between entries
echo "\n" >> ${config_file}
#create destination folder, if it doesn't exist
[ -d ${destdir}${jj} ] || mkdir ${destdir}${jj}
done
Giống như @DanR đề xuất, hãy thử với logrotate -d
Đó là chủ đề cũ, nhưng bạn có thể làm như sau:
/var/log/basedir/**/*.log {
daily
rotate 5
}
Hai ngôi sao này sẽ khớp với 0 hoặc nhiều thư mục. Tuy nhiên, bạn phải cẩn thận với cách bạn xác định các tệp nhật ký sẽ được xoay, bởi vì bạn có thể xoay các tệp đã được xoay. Tôi sẽ trích dẫn hướng dẫn sử dụng logrotate ở đây.
Vui lòng sử dụng các ký tự đại diện một cách thận trọng. Nếu bạn chỉ định *, logrotate sẽ xoay tất cả các tệp, bao gồm cả các tệp đã xoay trước đó. Một cách khác là sử dụng chỉ thị olddir hoặc ký tự đại diện chính xác hơn (như * .log).
globstar
trước khi chạy logrotate. Điều này sẽ cho phép nó cho bash shopt -s globstar
.
-d
đặt logrotate ở chế độ chạy khô (nghĩa là không thực sự thay đổi bất cứ điều gì) thực sự.