logrotate работает некорректно

Я использую:
Linux workdesk 3.16.0-31-generiC#43~14.04.1-Ubuntu SMP Вторник, 10 марта 20:13:38 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

Идентификатор распространителя: Ubuntu
Описание: Ubuntu 14.04.2 LTS
Релиз: 14.04
Кодовое имя: верный

logrotate 3.8.7-1ubuntu1 amd64

Я пытался протестировать поведение logrotate.

мой файл conf:

/home/user/test/*.log {  
       daily  
       rotate 2  
       ifempty  
       su user user  
}  

ls /home/user/test/*.log выходы

/home/user/test/1.log

sudo logrotate -fv /etc/logrotate.d/r

выходы

reading config file /etc/logrotate.d/r

Handling 1 logs

rotating pattern: /home/user/test/*.log  forced from command line (2 rotations)  
empty log files are rotated, old logs are removed  
switching euid to 1000 and egid to 1000  
considering log /home/user/test/1.log  
  log needs rotating  
rotating log /home/user/test/1.log, log->rotateCount is 2  
dateext suffix '-20150327'  
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'  
renaming /home/user/test/1.log.2 to /home/user/test/1.log.3 (rotatecount 2, logstart 1, i 2),  
old log /home/user/test/1.log.2 does not exist  
renaming /home/user/test/1.log.1 to /home/user/test/1.log.2 (rotatecount 2, logstart 1, i 1),  
old log /home/user/test/1.log.1 does not exist  
renaming /home/user/test/1.log.0 to /home/user/test/1.log.1 (rotatecount 2, logstart 1, i 0),  
old log /home/user/test/1.log.0 does not exist  
log /home/user/test/1.log.3 doesn't exist -- won't try to dispose of it  
renaming /home/user/test/1.log to /home/user/test/1.log.1  
switching euid to 0 and egid to 0  

и после ls выходы

1.log.1  

и это все

Может кто-нибудь объяснить вращение процесса?
1) Что такое "переименование /home/user/test/1.log.0 в /home/user/test/1.log.1"? Если у меня есть счетчик поворота = 0
2) Где находится файл 1.log?
3) где находится 1.log.0? Насколько я понимаю, я должен получить только 1.log пустой файл и все

1 ответ

Ваш файл конфигурации просит повернуть файл *.log в /home/user/test каждый день, даже если файл пуст и сохраняются два старых файла.

logrotate выполняет это действие (как вы можете видеть в подробном выводе):

  • изменить пользователя и группу (из-за su user user)
  • переименуйте старые журналы, если они существуют, начиная с 1.log.2 (из-за rotate 2)
  • Удалить 1.log.3 если существует (из-за rotate 2)
  • переименовать текущий 1.log в 1.log.1
  • переключить обратно пользователя и группу

Итак, как и ожидалось, в конце вы нашли 1.log.1 что это должно быть 1.log файл переименован.

При переименовании процесса печатается ошибка, но logrotate не завершается ошибкой, если старый файл журнала не существует, который еще не был создан в предыдущие дни.

Если приложение пишет в 1.log, после ротации журнала, он все еще пишет в 1.log.1 потому что переименование файла не меняет его индекс. В этом случае вы должны заставить приложение закрыть текущий файл журнала и снова открыть его, используя его изящный перезапуск.

Вот полезная ссылка о том, как это сделать.

Я не могу объяснить, почему logrotate пытается переименовать 1.log.0Кажется, ошибка реализации, которая не вызывает каких-либо ошибок.

Другие вопросы по тегам