我的bash脚本会生成一个日志文件。现在我想实现一些日志文件的轮换。假设第一次被调用是'somelog.log',下一次将其重命名为'somelog.log.1'并创建新的日志文件'somelog.log'。第三次新的日志仍然是'somelog.log',但是'somelog.log.1'被重命名为'somelog.log.2',而旧的'somelog.log'被重命名为'somelog.log.1'。我希望最多可保留5个日志文件。之前有人这样做过吗(示例脚本),有何建议?感激不尽。
试试这个bash函数,它需要两个参数:
源代码:
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 $?
}
> ./logrotator.sh -f private/log -m {fileName}.{datetime}.txt -v