Проверьте эту статью: http://unix.ittoolbox.com/groups/technical-functional/solaris-l/nohup-files-rotation-when-process-is-running-639605
logrotate сам по себе не поддерживает разделение повернутых журналов / с, только сжатие.
Вы можете получить желаемое поведение, написав собственный сценарий, который обрабатывает разделение и вызовите это как сценарий postrotate в вашей конфигурации logrotate для этого конкретного файла / файлов.
update : на основе вашего комментария («слишком поздно разделять файлы, потому что они будут разделены logrotate "), похоже, вы все еще думаете, что logrotate выполняет разделение файлов. Это неверно, на самом деле происходит то, что logrotate переименовывает существующий файл и создает новый пустой файл с исходным именем.
Пример:
/var/log/syslog
{
rotate 7
daily
missingok
notifempty
delaycompress
compress
postrotate
reload rsyslog >/dev/null 2>&1 || true
endscript
}
Когда запускается logrotate:
Надеюсь, теперь вы лучше понимаете, что делает logrotate.
update 2 : Я обращусь к вашим комментариям здесь, так как параметры форматирования в разделе комментариев ограничены.
Итак, когда я понял прямо в части постобработки, необходимо перезагрузить rsyslog, чтобы гарантировать, что старый файловый дескриптор (до вращения) будет закрыт, а новый файловый дескриптор (после вращения) будет открыт (из-за: mv syslog syslog .1)?
Правильно на 100%. После того, как logrotate переместит файл, rsyslog все еще будет писать в старый файловый дескриптор. Процесс выполняет ввод-вывод для файлового дескриптора, имя представляет интерес только при выполнении начального открытия файла.
Я думал, что logrotate имеет некоторый механизм для достижения этого автоматически.
Нет, отсюда и необходимость сделайте это в сценарии постротации. Помните, что не все журналы обязательно выполняются процессом, который хранит дескриптор открытого файла. Если у вас есть процесс, который открывает файл, записывает в него, а затем многократно закрывает (дескриптор файла), то вам не нужно ' t возиться с чем-либо в postrotate.
PS: Вы имели в виду «syslog.0», а не «syslog» в следующем высказывании: «процесс rsyslog все еще записывает в старый файл syslog.0.»? Потому что "старый" журнал - это / var / log / syslog, а не /var/log/syslog.0. Спасибо
Нет. Я имею в виду, что он все еще пишет в существующий файловый дескриптор, который logrotate переименовал в syslog.0. Имея дело с такими процессами, как rsyslog, всегда помните, что имя файла актуально только в момент, когда rsyslog открывает его, то есть когда он создает дескриптор файла. После этого вы можете переименовать, переместить или даже удалить файл, и процесс продолжит беспрепятственно выполнять ввод-вывод для файлового дескриптора.
Имея дело с такими процессами, как rsyslog, всегда помните, что имя файла актуально только в момент, когда rsyslog открывает его, то есть когда он создает дескриптор файла. После этого вы можете переименовать, переместить или даже удалить файл, и процесс продолжит беспрепятственно выполнять ввод-вывод для файлового дескриптора. Имея дело с такими процессами, как rsyslog, всегда помните, что имя файла актуально только в момент, когда rsyslog открывает его, то есть когда он создает дескриптор файла. После этого вы можете переименовать, переместить или даже удалить файл, и процесс продолжит беспрепятственно выполнять ввод-вывод для дескриптора файла.