Поворот файла журнала Bash-скрипта - PullRequest
7 голосов
/ 11 сентября 2010

Мой скрипт bash создает файл журнала.Теперь я хотел бы реализовать ротацию файла журнала.
Скажем, в первый раз он называется somelog.log , в следующий раз он переименован в somelog.log.1 новый файл журнала somelog.log .
В третий раз новый журнал somelog.log снова, но somelog.log.1 переименовывается в somelog.log.2 и старый somelog.log до somelog.log.1 .
Я мог бы предоставить максимум, например, 5.

Это сделано раньше (пример сценария), любые предложения.Я ценю любой совет.

Ответы [ 2 ]

2 голосов
/ 08 сентября 2015

Попробуйте эту функцию 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 голосов
/ 18 октября 2015

Я только что сделал bash-скрипт для этого: https://github.com/lingtalfi/logrotator

Он в основном проверяет размер вашего файла журнала и, если он превышает произвольный порог, копирует файл журнала в каталог журнала.

Это cron дружественный, или вы можете использовать его вручную.

Типичная команда выглядит так:

> ./logrotator.sh -f private/log -m {fileName}.{datetime}.txt -v
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...