Как я могу указать желаемый размер выходного файла после ротации? Например, скажем, я хочу запустить logrotate, когда файл журнала достигнет 10 МБ, и я хочу разбить этот журнал на куски размером не более 1 МБ. Я нашел параметры «размер», но они устанавливают предел, выше которого запускается logrotate, а не размер желаемого фрагмента. Спасибо
Сам по себе logrotate не поддерживает разделение повернутых журналов / с, только сжатие.
Вы можете получить желаемое поведение, написав собственный сценарий, который обрабатывает разделение, и назовите его как сценарий postrotate в конфигурации logrotate для этого конкретного файла / файлов.
Обновить: на основании вашего комментария («слишком поздно разбивать файлы, потому что они будут разделены с помощью logrotate»), похоже, вы все еще имеете представление о том, что logrotate выполняет разделение файлов. Это неверно, на самом деле происходит то, что logrotate переименовывает существующий файл и создает новый пустой файл с исходным именем.
Пример:
/var/log/syslog
{
rotate 7
daily
missingok
notifempty
delaycompress
compress
postrotate
reload rsyslog >/dev/null 2>&1 || true
endscript
}
Когда запускается logrotate:
Надеюсь, вы лучше понимаете, что сейчас делает logrotate.
обновление 2: Я обращусь к вашим комментариям здесь, поскольку параметры форматирования в разделе комментариев ограничены.
Итак, когда я понимаю, что в части постобработки, необходимо перезагрузить rsyslog, чтобы гарантировать, что старый дескриптор файла (до ротации) будет закрыт, а новый дескриптор файла (после ротации) будет открыт (из-за: mv syslog syslog.1) ?
100% правильно. После того, как logrotate переместит файл, rsyslog все еще будет писать в старый файловый дескриптор. Процесс выполняет ввод-вывод для файлового дескриптора, имя представляет интерес только при выполнении начального открытия файла.
Я думал, что у logrotate есть какой-то механизм для автоматического достижения этого.
Нет, следовательно, необходимо сделать это в сценарии postrotate. Помните, что не все журналы обязательно выполняются процессом, который хранит дескриптор открытого файла. Если у вас есть процесс, который открывает файл, записывает в него и затем многократно закрывает (дескриптор файла), то вам не нужно ни с чем возиться в постротате.
PS: Вы имели в виду "syslog.0", а не "syslog" в следующем предложении: "процесс rsyslog все еще записывает в старый файл syslog.0."? Потому что "старый" журнал - это / var / log / syslog, а не /var/log/syslog.0. Спасибо
Нет. Я имею в виду, что он все еще пишет в существующий файловый дескриптор, который logrotate переименовал в syslog.0. При работе с такими процессами, как rsyslog, всегда помните, что имя файла актуально только в момент, когда rsyslog открывает его, то есть когда он создает дескриптор файла. После этого вы можете переименовать, переместить или даже удалить файл, и процесс продолжит беспрепятственно выполнять ввод-вывод в файловом дескрипторе.