Я использую:
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 пустой файл, и это все
Ваш конфигурационный файл просит поворачивать файл *.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
, это кажется ошибкой реализации, которые не вызывают ошибки.