У меня есть сервер Apache (2.2), работающий в RHEL 6.3, со следующей конфигурацией logrotate:
# Rule for Apache logs
/var/opt/apache/logs/*log {
compress
missingok
notifempty
daily
rotate 15
create 0640 www_adm apache
olddir /var/opt/apache/logs/rotated
sharedscripts
postrotate
/bin/kill -HUP `cat /var/opt/apache/logs/httpd.pid 2>/dev/null` 2> /dev/null || true
endscript
}
# Rule for Apache-Application logs
/var/opt/apache/logs/*/*log /var/opt/apache/logs/*/*/*log {
daily
copytruncate
compress
missingok
dateext
dateformat .%Y-%m-%d
rotate 90
create 0640 www_adm apache
sharedscripts
postrotate
/bin/kill -HUP `cat /var/opt/apache/logs/httpd.pid 2>/dev/null` 2> /dev/null || true
endscript
}
Задание cron выполняется ежедневно без проблем, но ротация файла работает не так, как ожидалось. Я получаю файлы с добавлением нескольких дат вместо одной в день:
mysite-ssl.2015-10-31.2015-11-02.2015-11-04.2015-11-06.2015-11-08.log
mysite-ssl.2015-10-31.2015-11-02.2015-11-04.2015-11-06.2015-11-08.2015-11-10.log
mysite-ssl.error.2015-10-21.2015-10-23.2015-10-25.2015-10-27.2015-10-29.2015-10-31.2015-11-02.2015-11-04.2015-11-06.2015-11-08.log
mysite-ssl.error.2015-10-21.2015-10-23.2015-10-25.2015-10-27.2015-10-29.2015-10-31.2015-11-02.2015-11-04.2015-11-06.2015-11-08.2015-11-10.log
mysite-ssl.2015-11-10.log.gz
mysite.2015-11-10.log.gz
mysite-ssl.2015-10-24.2015-10-26.2015-10-28.2015-10-30.2015-11-01.2015-11-03.2015-11-05.2015-11-07.2015-11-09.log
mysite-ssl.2015-10-24.2015-10-26.2015-10-28.2015-10-30.2015-11-01.2015-11-03.2015-11-05.2015-11-07.2015-11-09.2015-11-11.log
mysite-ssl.2015-11-11.log.gz
mysite.2015-11-11.log.gz
Также кажется, что logrotate больше ничего не делает в файлах журнала (см. Head / tail):
[user@host mysite]$ head mysite.log ; echo "----------------" ; tail mysite.log
145.245.114.238 - - [11/Nov/2015:03:25:30 +0100] "GET / HTTP/1.1" 301 306
145.245.114.238 - - [11/Nov/2015:03:28:07 +0100] "GET / HTTP/1.1" 301 306
145.245.114.238 - - [11/Nov/2015:03:30:03 +0100] "HEAD / HTTP/1.1" 301 -
145.245.114.237 - - [11/Nov/2015:03:31:15 +0100] "HEAD / HTTP/1.1" 301 -
145.245.114.237 - - [11/Nov/2015:03:31:15 +0100] "HEAD /mysite HTTP/1.1" 302 -
145.245.114.238 - - [11/Nov/2015:03:31:15 +0100] "HEAD /mysite/index.html HTTP/1.1" 200 -
145.245.114.238 - - [11/Nov/2015:03:31:36 +0100] "GET / HTTP/1.1" 301 306
145.245.114.237 - - [11/Nov/2015:03:31:48 +0100] "GET / HTTP/1.1" 301 306
145.245.114.238 - - [11/Nov/2015:03:35:28 +0100] "GET / HTTP/1.1" 301 306
145.245.114.237 - - [11/Nov/2015:03:38:07 +0100] "GET / HTTP/1.1" 301 306
----------------
145.245.114.238 - - [07/Jan/2016:15:41:36 +0100] "GET / HTTP/1.1" 301 306
145.245.114.237 - - [07/Jan/2016:15:44:12 +0100] "GET / HTTP/1.1" 301 306
145.245.114.238 - - [07/Jan/2016:15:47:41 +0100] "GET / HTTP/1.1" 301 306
145.245.114.238 - - [07/Jan/2016:15:47:57 +0100] "GET / HTTP/1.1" 301 306
145.245.114.237 - - [07/Jan/2016:15:51:36 +0100] "GET / HTTP/1.1" 301 306
145.245.114.238 - - [07/Jan/2016:15:54:12 +0100] "GET / HTTP/1.1" 301 306
145.245.114.238 - - [07/Jan/2016:15:55:04 +0100] "HEAD / HTTP/1.1" 301 -
145.245.114.237 - - [07/Jan/2016:15:57:41 +0100] "GET / HTTP/1.1" 301 306
145.245.114.237 - - [07/Jan/2016:15:57:57 +0100] "GET / HTTP/1.1" 301 306
145.245.114.237 - - [07/Jan/2016:16:01:36 +0100] "GET / HTTP/1.1" 301 306
Есть идеи, что могло быть причиной такого поведения? В моей конфигурации чего-то не хватает?
Первая строка второго блока в конфигурации logrotate соответствует файлам, заканчивающимся на "log".
/var/opt/apache/logs/*/*log /var/opt/apache/logs/*/*/*log {
Обычно, когда вы поворачиваете файлы и сжимаете их, расширение становится .gz
. Это означает, что указанная выше строка больше не будет совпадать.
Однако вы меняете расширение файла в строке:
extension .log
Это заставит ваши файлы снова повернуться. Вам необходимо удалить эту строку, чтобы предотвратить изменение расширения, или переместите повернутые файлы в другую папку, используя olddir
как вы это делаете в первом блоке конфигурации.
Вы переносите старые файлы журналов в файлы с датой. и .log
добавлен в конец.
Шаблон, соответствующий тому, какие файлы следует повернуть, следовательно, также соответствует старым файлам журнала, которые снова меняются (поэтому добавляется новая дата, и снова .log
прилагается).
Вам необходимо убедиться, что старые уже повернутые файлы журналов больше не повернуты. Вы уже используете отдельный каталог для ротационных файлов журнала, но он соответствует /var/opt/apache/logs/*/*log
узор во второй строфе.
Обычно ротационные файлы журналов имеют дату в самом конце, чтобы предотвратить такие проблемы.