2010-09-11 34 views
7

Tập lệnh bash của tôi tạo ra một tệp nhật ký. Bây giờ tôi muốn thực hiện một số tập tin đăng nhập xoay.
Giả sử lần đầu tiên được gọi là somelog.log, lần tiếp theo được đổi tên thành somelog.log.1 và tệp nhật ký mới somelog.log.
Lần thứ ba đăng nhập mới là somelog.log một lần nữa, nhưng somelog.log.1 được đổi tên thành somelog.log.2 và cũ somelog.log để somelog.log.1.
Tôi sẽ có thể cấp tối đa là ví dụ 5.

Điều này được thực hiện trước đó (tập lệnh mẫu), mọi đề xuất. Tôi đánh giá cao bất kỳ lời khuyên nào.Xoay tập tin nhật ký tập lệnh Bash

+1

người đàn ông [logrotate] (http://linux.die.net/man/8/logrotate)? –

+1

Đã được trả lời. [tại đây] [1] [1]: http://stackoverflow.com/questions/3690936/change-file-name-suffixes-using-sed/3691279#3691279 –

Trả lời

2

Hãy thử chức năng bash này, phải mất hai tham số:

  1. số megabyte tối đa các tập tin được vượt quá để được luân chuyển (nếu không được phép bị ảnh hưởng)
  2. đường dẫn đầy đủ của tên tập tin.

nguồn:

function rotate() { 
    # minimum file size to rotate in MBi: 
    local MB="$1" 
    # filename to rotate (full path) 
    local F="$2" 
    local msize="$((1024*1024*${MB}))" 
    test -e "$F" || return 2 

    local D="$(dirname "$F")" 
    local E=${F##*.} 
    local B="$(basename "$F" ."$E")" 

    local s= 

    echo "rotate msize=$msize file=$F -> $D | $B | $E" 
    if [ "$(stat --printf %s "$F")" -ge $msize ] ; then 
    for i in 8 9 7 6 5 4 3 2 1 0; do 
     s="$D/$B-$i.$E" 
     test -e "$s" && mv $s "$D/$B-$((i+1)).$E" 
    # emtpy command is need to avoid exit iteration if test fails: 
     :; 
    done && 
    mv $F $D/$B-0.$E 
    else 
    echo "rotate skip: $F < $msize, skip" 
    fi 
    return $? 
} 
0

Tôi đã chỉ cần thực hiện một kịch bản bash cho rằng: https://github.com/lingtalfi/logrotator

Nó cơ bản kiểm tra kích thước tập tin đăng nhập của bạn, và nếu nó vượt quá một ngưỡng tùy ý, nó sao chép tệp nhật ký vào thư mục nhật ký.

Đó là cron thân thiện, hoặc bạn có thể sử dụng nó theo cách thủ công.

Một lệnh điển hình trông như thế:

> ./logrotator.sh -f private/log -m {fileName}.{datetime}.txt -v 
Các vấn đề liên quan