Как вы уже упоминали, в 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"
.