Как вставить дату в имя файла с помощью logrotate

Мне нужно установить logrotate для ротации файлов журналов из приложения, работающего на сервере. Мне нужна дата внутри имени файла.

Я установил dateext, а также формат даты, чтобы добавить - в дату. Имя файла результата: whatever.csv_2012-03-03

Я хотел бы, чтобы отметка времени была частью имени файла, сохраняя расширение; Whatever_2012-03-03.csv.


person Bernard Sfez    schedule 04.03.2012    source источник


Ответы (2)


Вы должны иметь возможность разделить расширение, например. whatever.2012-03-03.csv со следующей конфигурацией:

whatever.csv {
  dateext
  dateformat .%Y-%m-%d
  extension .csv
  ...
}

Обратите внимание, что dateext намеренно пуст.

person Stéphane    schedule 02.08.2012
comment
Я пробовал это, но дата добавляется при каждом вращении, поэтому я получаю file.log, file.2014-01-08.log и file.2014-01-07.2014-01-08.log и т. д. - person fadedbee; 08.01.2014
comment
Я обнаружил, что extension должен иметь ., поэтому правильная форма - extension .csv. Это также следует в compressext как в compressext .bz2 - person ADTC; 24.01.2014
comment
Также должно быть dateformat .%Y-%m-%d (первая точка — дата, вторая — расширение). @chrisdew это, вероятно, потому, что вы используете подстановочный знак, поэтому logrotate пытается вращать как file.log, так и file.2014-01-07.log. Либо используйте фиксированное имя, либо используйте параметр olddir для перемещения повернутых файлов в другой каталог, чтобы они не подбирались подстановочным знаком. - person ADTC; 24.01.2014
comment
Параметр dateformat вызывает у меня segfault fedorahosted.org/logrotate/ticket/39 - person Rob; 07.08.2014
comment
@Rob, к сожалению, fedorahosted — это бывший сервис: fedorahosted.org был закрыт 1 марта 2017 года. - person Chris Woods; 19.02.2018

Чтобы вставить дату в имя файла (а не как расширение) файла под Linux при вращении файла, правильно использовать:

# Daily rotation
    daily

# We keep original file live
    copytruncate

# Rotation is 1 so we have always .1 as extension
    rotate 1

# If file is missing keep working
    missingok

    sharedscripts
    postrotate
            day=$(date +%Y-%m-%d)
            mv blabla.csv.1 /var/www/gamelogs/dir/blabla$day.csv
    endscript
}

Это просто и работает нормально.

person Bernard Sfez    schedule 05.03.2012
comment
Мне нравится это решение. Если я правильно понял, у этого есть побочный эффект: logrotate больше не будет ограничивать количество сохраняемых файлов. Если задумано, то нормально. - person Marian; 08.07.2014
comment
Достаточно просто добавить оператор find $logdir -mtime +$maxage -delete в сценарий постротации. - person Rob; 07.08.2014
comment
@Rob, так какой смысл использовать logrotate? - person cnst; 16.09.2014
comment
@cnst Не так много, кроме добавления кода ротации журнала с другим кодом ротации журнала, поэтому будущий системный администратор может исправить это, чтобы использовать dateext, если и когда проблема segfault исчезнет. - person Rob; 19.09.2014
comment
rotate 1 слишком ограничительный. - person 2rs2ts; 17.11.2015
comment
Если ваши журналы перемещаются очень быстро, вы потеряете некоторые данные из-за использования copytruncate. Провел несколько тестов с использованием seq и перенаправлением вывода в файл журнала и подтвердил это. - person alfredocambera; 17.02.2016