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
Кодовое имя: trusty

logrotate 3.8.7- 1ubuntu1 amd64

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

мой файл конфигурации:

/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 пустой файл, и это все

2
задан 27 March 2015 в 17:27

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 потому что переименование файла не изменяет inode файла. В этом случае необходимо вынудить приложение закрыть текущий файл журнала и вновь открыть его, с помощью его корректного перезапуска.

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

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

0
ответ дан 28 March 2015 в 03:27

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

Похожие вопросы: