由于手册页没有回答我的问题并且我不想强制轮换循环,所以我决定在这里提出这个问题。
logrotate 的手册页给出了以下示例:
"/var/log/httpd/access.log" /var/log/httpd/error.log {
rotate 5
mail [email protected]
size 100k
sharedscripts
postrotate
/usr/bin/killall -HUP httpd
endscript
}
所有带通配符的示例都只包含一个条目。现在,我感兴趣的是这个是否也允许:
/var/log/httpd/*.log /var/log/httpd/*/*.log {
# ... same as above
}
原因如下:我有多个虚拟主机,我根据“拥有”这些虚拟主机的用户对它们进行拆分。由于日志文件是全球可读的,我想将一个文件夹绑定到用户主目录中,但将其限制为用户“拥有”的日志文件,最简单的方法是将日志分成文件夹(绑定安装无论如何都需要该方案)。所以我正在寻找一种解决方案来轮换该目录下的日志文件/var/log/httpd
以及该目录子目录下的所有日志文件 -没有必须按名称列出每个子目录。
一般情况下,手册页不会提示通配符规则是否有多个条目,或者只有完整路径才有多个条目。我使用的是 Debian“Squeeze”附带的 logrotate 版本 3.7.8-6,但我认为这不一定特定于发行版或程序版本。
答案1
是的,您可以使用多个通配符。您可以通过以下方式测试文件而无需执行实际旋转:
logrotate -d -f /etc/logrotate.conf
-d = 打开调试模式。在调试模式下,不会对日志或 logrotate 状态文件进行任何更改。
-f = 告诉 logrotate 强制轮换,即使它认为没有必要。有时在向 logrotate 添加新条目后,或者手动删除旧日志文件后,这很有用,因为将创建新文件,并且日志记录将继续正确进行。
答案2
我只是想澄清一下,因为我来这里就是为了看看怎么做,
允许为单个配置指定多个日志文件,例如
/var/log/httpd/access.log
/var/log/httpd/error.log
/var/log/httpd/mysite/*.log
{
rotate 5
mail [email protected]
size 100k
sharedscripts
postrotate
/usr/bin/killall -HUP httpd
endscript
}
答案3
来自手册页日志旋转:
请注意,日志文件名可以用引号括起来(如果名称包含空格,则必须使用引号)。适用正常的 shell 引号规则,支持 '、" 和 \ 字符。
从单个模式变为多个模式时,请记住修改或删除引号:
这有效:
/var/log/*.log /var/log/*.blog {
这也有效:
/var/log/*.log
/var/log/*.blog {
这不起作用:
'/var/log/*.log /var/log/*.blog' {
并且这也不是:
"/var/log/*.log /var/log/*.blog" {
与单一模式的情况进行比较。
这有效:
'/var/log/*.log' {
这也有效:
"/var/log/*.log" {
使用 logrotate 3.10.0 测试
编辑: 这也有效:
"/opt/logs/*.log" "/opt/logs/dir with space/*.log" {
并且多行带引号也有效:
"/opt/logs/*.log"
"/opt/logs/dir with space/*.log" {
使用 logrotate 3.14.0 进行测试