logrotate dateformat не поддерживает расширение в миллисекундах - PullRequest
0 голосов
/ 14 апреля 2019

Я использую logrotate.Он отлично работает с dateformat %s и генерирует файлы в somefile.log.1555267419.gz.Но мне нужно добавить расширение в формате даты в миллисекундах (somefile.log.1555267419789.gz).

Я проверил man-страницу и, насколько я понял, говорит, что не поддерживает спецификатор миллисекунд.

Есть ли способ добавить миллисекунды в расширение и при этом иметь возможность вращать старые файлы журнала?

/var/log/somelog/*.log {
   compress
   notifempty
   daily
   copytruncate
   size 15M
   dateext
   dateformat .%s
   rotate 20
}

1 Ответ

0 голосов
/ 16 мая 2019

Как вы уже упоминали, в logrotate docs не упоминается поддержка миллисекунд. Вы можете получить время EPOCH, используя %s, предполагая, что системные часы истекли 9 сентября 2001 года.

формат даты строка_формата

Укажите расширение для dateext, используя нотацию, аналогичную функции strftime (3). Допускаются только спецификаторы% Y% m% d и% s. Значение по умолчанию -% Y% m% d. Обратите внимание, что символ, отделяющий имя журнала от расширения, является частью строки dateformat. Для правильной работы% s системные часы должны быть установлены после 9 сентября 2001 года. Обратите внимание, что метки даты, сгенерированные этим форматом, должны быть лексически сортируемыми (то есть сначала год, затем месяц, а затем день. Например, 2001/12/01 в порядке, но 01/12/2001 нет, поскольку 01/11 / 2002 год будет отсортирован ниже, а потом). Это связано с тем, что при использовании параметра rotate logrotate сортирует все повернутые имена файлов, чтобы выяснить, какие файлы журналов старше и должны быть удалены.

Однако вы можете попытаться установить EPOCH с точностью до миллисекунды, используя logrotate script s вручную. Вот пример, где вы вызываете пользовательский скрипт, расположенный в /my/script, который принимает повернутое имя файла в качестве параметра. Используя $1 в prerotate / postrotate, вы получите абсолютный путь к вращаемому файлу. Вы также хотите использовать конфигурацию nosharedscripts (которая установлена ​​по умолчанию), чтобы убедиться, что сценарии prerotate / postrotate запускаются для каждого файла журнала, соответствующего вашему шаблону *.log.

/var/log/somelog/*.log {
   compress
   notifempty
   daily
   copytruncate
   size 15M
   dateext
   dateformat .%s
   rotate 20
   nosharedscripts
   postrotate
       /my/bash/script $1 > /dev/null
   endscript
}

В вашем собственном скрипте вы можете установить миллисекунды для имени файла, переименовав его. Один из способов получить EPOCH с миллисекундами на компьютере с Linux - запустить date "+%s%3N".

...