我想配置logrotate来处理/var/log/apache2/access.log,与写入/ var / log / apache2的所有其他日志文件分开处理。如果没有明确地通过名称指定所有其他日志,有没有办法让它工作?
我在线阅读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写入其自己的目录,或者修改非访问日志文件的名称?
我还试图通过使用在尝试旋转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
}
答案 0 :(得分:0)
你是从cron运行的吗?您可以尝试使用bash -c“..”执行cron脚本,以确保从bash调用logrotate。不确定它是否有帮助。