Tôi có thể sử dụng logrotate để nén nhật ký hàng ngày (tên ngày) không?


8

Tôi có nhật ký theo định dạng sau: YYYYMMDD

Tôi muốn nén các bản ghi cũ (cũ hơn ngày hiện tại) và có thể chuyển chúng sang một thư mục khác sau đó.

Tôi có thể làm điều này trong logrotate hay tôi phải sử dụng tập lệnh tùy chỉnh trong cron?

Câu trả lời:


4

Đây là một kịch bản quickie sẽ làm những gì bạn cần:

#!/bin/bash
LOGDIR=/var/log/somedir
OLDLOGS=/var/log/keep-old-logs-here
PATH=/bin:$PATH
TODAY=$(date +'%Y%m%d')

[ -d $OLDLOGS ] || mkdir -p $OLDLOGS

cd $LOGDIR

for LOG in $(ls | egrep '^[[:digit:]]{8}$'); do
    [ $LOG -lt $TODAY ] && gzip $LOG && mv $LOG.gz 
done

Làm cho tập lệnh thực thi:

$ chmod +x /where/you/put/this/script

Mục crontab sẽ trông như sau:

30 0 * * * /where/you/put/this/script

Chỉ cần điều chỉnh LOGDIROLDLOGDIR. Vào lúc 12:30 sáng, nó sẽ di chuyển tất cả các bản ghi theo định dạng của YYYYMMDD cho các ngày trước đó (và trước đó, nếu có).


4
Có, nhưng nó không thực sự trả lời câu hỏi của tôi. Câu hỏi của tôi là liệu tôi có thể sử dụng logrotate cho việc này không.
Šimon Tóth

@Let_Me_Be - Tôi nghĩ đó là ẩn ý trong câu trả lời của tôi. Không, logrotate sẽ không làm chính xác những gì bạn muốn. Đó là, bạn không thể chỉ khớp các tệp YYYYMMDD. Nếu không, bạn có thể đến gần bằng cách sử dụng nodateext, olddir, compress, và dailycác tùy chọn.
unpythonic

3

logrotate có thể làm điều đó với olddir nếu tên tệp nhật ký của bạn giống nhau mỗi lần nó chạy và bạn có thể thêm ngày. Nếu tên tệp nhật ký của bạn thay đổi, tức là YYYYMMDD thì logrotate sẽ không làm điều đó cho bạn.

# sample logrotate conf file
copytruncate
compress
dateformat %Y%m%d.
dateext
extension log
olddir ./logarchive

/logs/sys.log {
    rotate 7
    daily
}

Bản sao và gzips /logs/sys.log thành /logs/logarchive/sys.20120101.log.gz, giữ nhật ký trị giá một tuần.


1
Đây không phải là câu trả lời. Các nhật ký đã có dấu thời gian và được xoay vòng hiệu quả Let_Me_Be chỉ muốn nén chúng. Tôi tin rằng @jmtd là đúng.
rút lorien

2

logrotatechính nó không làm điều này. Tôi khuyên bạn nên viết một tập lệnh bổ sung và yêu cầu nó logrotatesử dụng postrotatetùy chọn trong cấu hình.

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.