Câu trả lời:
#!/bin/bash
touch /script_logs/test.log
MaxFileSize=2048
while true
do
sh test.sh >> /script_logs/test.log
#Get size in bytes**
file_size=`du -b /script_logs/test.log | tr -s '\t' ' ' | cut -d' ' -f1`
if [ $file_size -gt $MaxFileSize ];then
timestamp=`date +%s`
mv /script_logs/test.log /script_logs/test.log.$timestamp
touch /script_logs/test.log
fi
done
Tôi đã xóa "&" vì nó có thể gây ra sự cố.
cp
và mv
, tôi có thể xóa tệp nhật ký không, sau đó có phải tệp nhật ký mới có cùng tên không? (Yêu cầu của tôi là, nếu tệp nhật ký đạt đến giới hạn nhất định, tôi muốn xóa tệp nhật ký đó và sau đó tạo tệp mới )
>>
để chắp thêm vào tệp nhật ký, >
sẽ ghi đè lên nhiều lần.
>
, tôi sẽ nhận được tail: test.log: file truncated Hello World!
.... Nếu tôi sử dụng >>
, tôi nhận được thông điệp tường trình chính xác, nhưng kích thước tệp đang tăng lên. Không có điều kiện kiểm tra điều kiện ... ;-(
sử dụng như thế nào savelog
?
Nó có sẵn trong debian và RH và khá nhiều bản phân phối linux khác mà tôi biết. Đó là tập lệnh shell / bin / sh, vì vậy cũng nên chạy trên bất kỳ unix nào khác.
ví dụ trước khi viết bất cứ điều gì để test.log
chạy savelog -n -c 7 test.log
. Điều này sẽ giữ 7 phiên bản test.log không trống gần đây nhất. Theo mặc định, nó sẽ nén các bản ghi xoay (nhưng có thể bị vô hiệu hóa -l
).
Nếu bạn cần, bạn có thể kiểm tra kích thước test.log
và chỉ savelog
nó nếu nó vượt quá một kích thước nhất định.
/usr/bin/savelog
tập lệnh shell tại nguồn.debian.net/src/debianutils/4.7
savelog
trên bất kỳ hộp RHEL / CentOS 5/6 nào của mình, vì vậy tôi mới tải xuống quảng cáo và nó dường như hoạt động tốt cho nhu cầu của tôi.
savelog
nó là đổi tên tập tin nhưng sau đó mất nhiều thời gian để gzip những cái cũ trước khi hoàn thiện. Trong khi đó, nhật ký .0 đã có các mục tiếp theo trong đó. Lý tưởng nhất là thời gian giữa luân chuyển nhật ký và báo hiệu quá trình mở lại nhật ký nên tối thiểu. Tôi tắt savelog
tính năng nén vì điều này.
Tôi đã viết một logrotee cuối tuần này. Tôi có lẽ sẽ không đọc được câu trả lời tuyệt vờimultilog
của @ JdeBP .
Tôi tập trung vào nó rất nhẹ và có thể bzip2 khối đầu ra của nó như:
verbosecommand | logrotee \
--compress "bzip2 {}" --compress-suffix .bz2 \
/var/log/verbosecommand.log
Dù vậy, vẫn còn rất nhiều việc phải làm và thử nghiệm.
Vì tôi chưa thể thêm nhận xét vào câu trả lời được chấp nhận , một gợi ý BusyBox , nơi du
không có -b
cờ:
du /var/log/file | tr -s '\t' ' ' | cut -d' ' -f1