我按照此链接更改了 RHEL 6 的日志轮换配置
对配置文件进行更改后,我该怎么做才能使其生效?
在长时间运行的系统上,我通常有一个终端
$ tail -f /var/log/kern.log
Run Code Online (Sandbox Code Playgroud)
或类似的东西打开。
但有时我必须重新启动此类命令,因为不再显示新消息。
我认为这是因为替换日志文件的日志轮换作业tail -f正在“观察”。
如何避免这种重启问题?
我可以调用tail这样它注意到旋转过程并做正确的事情吗?
(我在rsyslogd默认使用的 Ubuntu 11.04 系统上注意到了这个问题。)
我有以下新的 logrotate 配置:
/var/log/nexus/nexus.log {
rotate 7
missingok
compress
delaycompress
copytruncate
daily
}
Run Code Online (Sandbox Code Playgroud)
当我运行时logrotate -d nexus,我得到以下信息:
reading config file nexus
reading config info for /var/log/nexus/nexus.log
Handling 1 logs
rotating pattern: /var/log/nexus/nexus.log after 1 days (7 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/nexus/nexus.log
log does not need rotating
Run Code Online (Sandbox Code Playgroud)
我的 /var/log/nexus/ 文件夹包含以下内容:
nexus.log
oldlogs.tar.gz
Run Code Online (Sandbox Code Playgroud)
为什么 LogRotate 不旋转 nexus.log 文件?我期待的是 nexus.log 文件会被截断,并且会创建一个新文件,比如 nexus.log-201106241000。
Geek Stuff有一个关于logrotate. copytruncate将复制并截断原始日志文件。
那我们为什么要使用create?原始日志文件尚未删除。
/tmp/output.log {
size 1k
copytruncate
create
compress
compresscmd /bin/bzip2
compressext .bz2
rotate 4
maxage 100
}
Run Code Online (Sandbox Code Playgroud)
另一个问题是有什么用maxage 100?该rotate 4指令将在 4 次轮换后删除旧的日志文件。
根据Unix和Linux管理手册和man,logrotate的有选项daily,weekly以及monthly,但有一种方法来添加一个hourly选项?
本博客文章中提到,您可以设置size 1和删除的时间选项(如:daily),然后手动调用logrotate与cron-我想是这样
logrotate -f /etc/logrotate.d/my-hourly-file
Run Code Online (Sandbox Code Playgroud)
但是有没有更优雅的每小时轮换日志的解决方案?
我使用 logrotate 来轮换 Apache 访问、错误和重写日志。我的配置文件如下所示:
/apache/*log {
compress
dateext
rotate 365
size=+300M
olddir /log/old/apache
notifempty
missingok
lastaction
/bin/apache reload
endscript
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,每当发生轮换时,都必须重新加载 Apache,因为 Apache 不会在刚刚轮换的日志文件中写入任何内容。有没有办法避免每次 logrotate 进行轮换时 Apache 重新加载?
我有一个正在运行的进程,它将标准输出和标准错误写入日志文件/var/log/dragonturtle.log。无论如何要轮换日志文件,并让进程继续写入新的日志文件而不终止进程?
当前发生了什么(鉴于下面的 logrotate 配置):
/var/log/dragonturtle.log/var/log/dragonturtle.log到/var/log/dragonturtle.log.1/var/log/dragonturtle.log.1我想发生什么:
/var/log/dragonturtle.log/var/log/dragonturtle.log到/var/log/dragonturtle.log.1/var/log/dragonturtle.log/var/log/dragonturtle.log/etc/logrotate.d/dragonturtle:
/var/log/dragonturtle.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 644 dragonturtle dragonturtle
}
Run Code Online (Sandbox Code Playgroud) 测试文件
#!/bin/bash
echo "Hello World"
Run Code Online (Sandbox Code Playgroud)
测试2.sh
#!/bin/bash
while true
do
sh test.sh >> /script_logs/test.log &
done
Run Code Online (Sandbox Code Playgroud)
我想实现logrotate来控制日志文件的大小,那么如何实现logrotate,如果是上面的情况呢?
任何人都可以向我解释 logrotation 中 'rotate' 和 'maxage' 的功能,因为这非常令人困惑。
考虑在我的脚本中使用以下值:
rotate 30
maxage 30
Run Code Online (Sandbox Code Playgroud)
谢谢..
我有一个由 systemd 管理的服务,它具有以下 systemd 配置,告诉 systemd 将日志直接写入文件(没有 syslog 或任何内容)
StandardOutput=file:/var/log/foo/my.log
Run Code Online (Sandbox Code Playgroud)
我有一个 logrotate 规则
/var/log/foo/*.log
{
rotate 31
daily
missingok
notifempty
compress
delaycompress
sharedscripts
}
Run Code Online (Sandbox Code Playgroud)
发生的情况是日志正在轮换,但服务仍在写入旧的轮换文件,而新日志文件仍为空。
我有一个类似的工作设置,其中服务写入系统日志。这个工作正常,因为 logrotate 配置有
postrotate
invoke-rc.d rsyslog rotate > /dev/null
Run Code Online (Sandbox Code Playgroud)
,它通知 syslog 它的日志已被轮换。
问题是,在我有问题的情况下,日志直接发送到文件,因此我不知道是否(或哪一个)需要向 systemd 或实际服务进程发送类似的信号。
我copytruncate在 logrotate 中找到了这个选项,我很确定它会解决我的问题,但我感觉这不是理想的方法,否则copytruncate将是 logrotate 的默认行为。
我该如何解决这个问题?我需要向 systemd 发送一些信号吗?我需要向服务进程发送一些信号吗?我必须copytruncate在 logrotate 中使用吗?
如果重要的话,该服务是一个使用 logback 写入 stdout 的 java 进程