2010-09-11 110 views
7

我的bash腳本生成一個日誌文件。現在我想實現一些日誌文件旋轉。
比方說第一次,它被稱爲somelog.log,它更名爲somelog.log.1和新的日誌文件somelog.log下一次。
第三次新的日誌是somelog.log了,但somelog.log.1更名爲somelog.log.2和老somelog.logsomelog.log.1
我將能夠授予最大例如5.

這是否完成之前(示例腳本),任何建議。我很欣賞任何建議。Bash腳本日誌文件輪換

+1

人[logrotate的](http://linux.die.net/man/8/logrotate)? – 2010-09-11 06:13:16

+1

已經回答。 [這裏] [1] [1]:http://stackoverflow.com/questions/3690936/change-file-name-suffixes-using-sed/3691279#3691279 – 2011-01-29 15:18:56

回答

2

試試這個bash函數,它有兩個參數:

  1. 數量最大兆字節的文件應該超過被旋轉(否則讓不變)
  2. 文件名的完整路徑。

來源:

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

我只是做了一個bash腳本: https://github.com/lingtalfi/logrotator

它基本上會檢查你的日誌文件的大小,如果超過任意的閾值,它複製將日誌文件放入日誌目錄中。

這是cron友好的,或者你也可以手動使用它。

的典型命令看起來像這樣:

> ./logrotator.sh -f private/log -m {fileName}.{datetime}.txt -v