Параметры файла glaf с именем logrotate

Я хочу настроить logrotate для обработки /var/log/apache 2/access.log отдельно от всех других файлов журналов, записанных в /var/log/apache 2. Не указывая явно все остальные журналы по имени, есть ли способ заставить это работать?

Я читал онлайн, что logrotate использует glob для сопоставления имен файлов с образцом, но я не могу написать правильный шаблон. Я пробовал много шаблонов, и все они ошибаются:

considering log /var/log/apache2/!(access.log)
 log /var/log/apache2/!(access.log) does not exist -- skipping

Вышеприведенный шаблон работает в bash, но только с shopt -s extglob. Есть ли способ сделать это с помощью logrotate, за исключением того, что apache пишет access.log в свой собственный каталог или управляет именами файлов журнала без доступа?

Я также попытался заставить это работать с использованием prerotate script, который терпит неудачу при попытке повернуть access.log, но logrotate жалуется, что я пытаюсь дважды вращать access.log с помощью

error: /etc/logrotate.d/apache2:16 duplicate log entry for /var/log/apache2/access.log

Это самое близкое, что я получил:

# rotate access.log every time logrotate is called
/var/log/apache2/access.log {
 missingok
 rotate 168
 compress
 create 640 root adm
 # rotate the log every time we call logrotate (size 0)
 size 0
 dateext
 dateformat .%Y%m%d.%s
 copytruncate
}
# rotate everything daily EXCEPT access.log
/var/log/apache2/*.log {
 daily
 missingok
 rotate 7
 compress
 create 640 root adm
 copytruncate
 # filter out access.log, which we want to rotate on its own schedule above
 nosharedscripts
 prerotate
 bash -c "[[ ! '$1' =~ /access.log ]]"
 endscript
}
1 ответ

Вы работаете из cron? Вы можете попытаться выполнить cron script с помощью bash -c "..", чтобы убедиться, что logrotate вызывается из bash. Не уверен, что это помогает.

licensed under cc by-sa 3.0 with attribution.