我正在尝试让 logrotate 在我的 VPS 上工作以每周轮换我的 apache 文件。目前 apache2 配置文件的内容是这样的。
"/var/www/user/site.com/logs/*.log" {
weekly
missingok
rotate 8
compress
delaycompress
notifempty
create 640 root adm
sharedscripts
postrotate
/etc/init.d/apache2 reload > /dev/null
endscript
}
Run Code Online (Sandbox Code Playgroud)
我已经离开它两个星期了,据我所知,一切都没有改变。当我从命令行模拟它时,我得到以下输出。
user@geneva:/var/lib/logrotate$ /usr/sbin/logrotate -d /etc/logrotate.d/apache2
reading config file /etc/logrotate.d/apache2
reading config info for "/var/www/user/site.com/logs/*.log"
Handling 1 logs
rotating pattern: "/var/www/user/site.com/logs/*.log" weekly (8 rotations)
empty log files are not rotated, old logs are removed
considering log /var/www/user/site.com/logs/access.log
log does not need rotating
considering log /var/www/user/site.com/logs/error.log
log does not need rotating
not running postrotate script, since no logs were rotated
Run Code Online (Sandbox Code Playgroud)
关于我配置错误的任何想法?
我的状态文件也是空的:(
user@geneva:~$ cat /var/lib/logrotate/status
logrotate state -- version 2
Run Code Online (Sandbox Code Playgroud)
更新
我删除了状态文件并强制运行了 logrotate,现在日志看起来已经旋转了,状态文件看起来更有希望!
sudo rm /var/lib/logrotate/status
sudo /usr/sbin/logrotate -f /etc/logrotate.conf
Run Code Online (Sandbox Code Playgroud)
Tom*_*Tom 18
我认为这weekly意味着 logrotate 想要查看您的 access.log 文件的至少一周前的条目,以便对其进行旋转。
因此,问题似乎是您没有存储状态条目来触发旋转。
这是一个简单的案例的逐步示例,说明 logrotate 如何决定旋转日志文件
(这些是 Fedora 路径,Ubuntu、Centos 等可能不同)
(我提出了一些请求,http://localhost所以在 access_log 中有一些条目,否则 logrotate 永远不会旋转......)
因此,我已将 apache 的 logrotate 设置为每周一次;
/var/log/httpd/*log {
weekly
...
}
Run Code Online (Sandbox Code Playgroud)
并且最初/var/lib/logrotate.status文件中 没有条目
# grep access_log /var/lib/logrotate.status
<- nothing
Run Code Online (Sandbox Code Playgroud)
所以 logrotate 不会旋转access_log文件;
# /usr/sbin/logrotate -d /etc/logrotate.d/httpd
...
considering log /var/log/httpd/access_log
log does not need rotating
Run Code Online (Sandbox Code Playgroud)
但是,如果我像这样手动运行 logrotate;
# /usr/sbin/logrotate /etc/logrotate.d/httpd
Run Code Online (Sandbox Code Playgroud)
现在在状态文件中有一个 httpd access_log 条目;
# grep access_log /var/lib/logrotate.status
"/var/log/httpd/access_log" 2012-5-11
Run Code Online (Sandbox Code Playgroud)
然而apache仍然不会轮换日志,因为条目只有0天(2012-5-11);
# /usr/sbin/logrotate -d /etc/logrotate.d/httpd
considering log /var/log/httpd/access_log
log does not need rotating
Run Code Online (Sandbox Code Playgroud)
但是,如果您使用 vi 编辑状态文件,vi /var/lib/logrotate.status则将日期设置为一周以上...;
# grep access_log /var/lib/logrotate.status
"/var/log/httpd/access_log" 2012-4-11 <--- more than a week ago..
Run Code Online (Sandbox Code Playgroud)
然后 logrotate 现在正确地旋转文件,因为状态文件中的日期2012-4-11是从今天起一个多星期前2012-5-11
# /usr/sbin/logrotate -d /etc/logrotate.d/httpd
considering log /var/log/httpd/access_log
log needs rotating <--- logrotate rotates the file.
Run Code Online (Sandbox Code Playgroud)
(请记住,这-d会导致空运行,因此仅对检查有用,您必须实际运行命令而无需-d进行状态条目或旋转文件等)
log does not need rotating
Run Code Online (Sandbox Code Playgroud)
这可能是因为您的日志文件为空。
发生这种情况是因为 apache 仍然写入以前的日志文件,该文件已在没有重新启动 apache 的情况下重命名。所以 access.log 变成了 access.log.1 并且 apache 写入其中。
或者你有日志的创建时间问题:
ls -al --time=ctime /var/www/user/site.com/logs/
Run Code Online (Sandbox Code Playgroud)
小智 6
我遇到了类似的问题,除了这些答案都没有帮助我。我的日志文件又大又旧,我的配置 100% 正常且有效,删除状态文件没有帮助。
原来问题出在重复的 logrotate 条目中。当我在我的配置文件上手动运行 logrotate 时:
logrotate -df /etc/logrotate.d/my_service_name
Run Code Online (Sandbox Code Playgroud)
它没有显示任何错误,它只是说:
log does not need rotating
Run Code Online (Sandbox Code Playgroud)
我仍然不知道为什么。但是当我像这样运行一个完整的 logrotate 命令时:
logrotate -f /etc/logrotate.conf
Run Code Online (Sandbox Code Playgroud)
我得到以下行:
error: my_service_name:1 duplicate log entry for /var/log/nginx/my_service_name.access.log
Run Code Online (Sandbox Code Playgroud)
事实证明,我的服务的 logrotate 配置文件包含轮换 nginx 访问日志的条目以及服务日志本身。这与 ngnix logrotate 配置相冲突,该配置对所有 nginx 条目都有一个规则:
# grep nginx /etc/logrotate.d/*
/etc/logrotate.d/nginx:/var/log/nginx/*.log {
Run Code Online (Sandbox Code Playgroud)
所以我的情况的解决方案非常简单:我只需要从我的 config 中删除冲突的nginx 日志轮换规则。
我想 logrotate 开始仅从最新版本之一开始中止处理规则冲突的文件。我在 v.3.8.7 中遇到此错误,但在 v.3.7.8 下具有相同的冲突配置,它会写出相同的错误,但旋转得很好。虽然我在 logrotate 更改日志中找不到任何记录。
| 归档时间: |
|
| 查看次数: |
54508 次 |
| 最近记录: |