Wak*_*nka 2 log-files logrotate
如何指定旋转后我想要的输出文件大小?例如,假设我想在日志文件达到 10MB 时运行 logrotate,并且我想将此日志拆分为最大 1MB 的块。我找到了“大小”选项,但这设置了运行 logrotate 的限制,而不是所需块的大小。谢谢
logrotate 本身不支持分割旋转日志/秒,只支持压缩。
您可以通过编写自己的处理拆分的脚本来获得所需的行为,并将其称为该特定文件的 logrotate 配置中的 postrotate 脚本。
更新:根据您的评论(“现在拆分文件为时已晚,因为它们将被 logrotate 拆分”),看来您仍然认为 logrotate 正在拆分文件。这是不正确的,实际发生的是 logrotate 重命名现有文件并使用原始名称创建一个新的空文件。
一个例子:
/var/log/syslog
{
rotate 7
daily
missingok
notifempty
delaycompress
compress
postrotate
reload rsyslog >/dev/null 2>&1 || true
endscript
}
Run Code Online (Sandbox Code Playgroud)
当 logrotate 运行时:
希望您对 logrotate 现在正在做什么有更好的了解。
更新 2:我将在此处解决您的评论,因为评论部分中的格式选项有限。
因此,当我在后处理部分理解正确时,有必要重新加载 rsyslog 以确保关闭旧文件描述符(旋转前)并打开新文件描述符(旋转后)(因为:mv syslog syslog.1) ?
100% 正确。logrotate 移动文件后,rsyslog 仍在写入旧的文件描述符。进程对文件描述符执行 I/O,名称仅在对文件执行初始打开时有用。
我认为 logrotate 有一些机制可以自动实现这一点。
不,因此需要在 postrotate 脚本中进行。请记住,并非所有日志记录都必须由保持打开文件描述符的进程完成。如果你有一个进程打开一个文件,写入它然后反复关闭(文件描述符),那么你不需要在 postrotate 中大惊小怪。
PS:在以下句子中,您的意思是“syslog.0”而不是“syslog”:“rsyslog 进程仍在写入旧文件 syslog.0。”?因为“旧”日志是 /var/log/syslog 不是 /var/log/syslog.0。谢谢
不。我的意思是它仍在写入现有的文件描述符,logrotate 已重命名为 syslog.0。在处理像 rsyslog 这样的进程时,请始终记住文件名仅在 rsyslog 打开它时才相关,即当它创建文件描述符时。之后,您可以重命名、移动甚至删除文件,进程将继续对文件描述符执行 I/O,不受阻碍。
| 归档时间: |
|
| 查看次数: |
984 次 |
| 最近记录: |