![如何限制我的系统日志的大小?](https://linux22.com/image/1111659/%E5%A6%82%E4%BD%95%E9%99%90%E5%88%B6%E6%88%91%E7%9A%84%E7%B3%BB%E7%BB%9F%E6%97%A5%E5%BF%97%E7%9A%84%E5%A4%A7%E5%B0%8F%EF%BC%9F.png)
我妈妈的电脑运行的是 Ubuntu 12.04 LTS。它一直运行良好,但系统日志突然就满了。所谓填满,是指我刚刚删除了一个/var/log/syslog
400GB 大小的文件。是的 - 几 GB。
虽然我确信其中有一些有用的信息,但我不确定 400GB 是否值得仔细查看。真正令人惊奇的是,这件事发生在 8 小时内 - 我df
中午左右开始运行,从那时到现在,她的驱动器已占用 30%(从不到 70% 到 100%)。
这可能是什么原因造成的?我该如何解决?
编辑 看起来 USB 是罪魁祸首:
Sep 8 08:52:10 pamela-desktop kernel: [ 6198.157829] usb 1-3: usbfs: process 1500 (demond_nscan) did not claim interface 3 before use
Sep 8 08:52:10 pamela-desktop kernel: [ 6198.157836] usb 1-3: usbfs: process 1500 (demond_nscan) did not claim interface 3 before use
Sep 8 08:52:10 pamela-desktop kernel: [ 6198.157842] usb 1-3: usbfs: process 1500 (demond_nscan) did not claim interface 3 before use
Sep 8 08:52:10 pamela-desktop kernel: [ 6198.157849] usb 1-3: usbfs: process 1500 (demond_nscan) did not claim interface 3 before use
Sep 8 08:52:10 pamela-desktop kernel: [ 6198.157857] usb 1-3: usbfs: process 1500 (demond_nscan) did not claim interface 3 before use
Sep 8 08:52:10 pamela-desktop kernel: [ 6198.157863] usb 1-3: usbfs: process 1500 (demond_nscan) did not claim interface 3 before use
Sep 8 08:52:10 pamela-desktop kernel: [ 6198.157870] usb 1-3: usbfs: process 1500 (demond_nscan) did not claim interface 3 before use
Sep 8 08:52:10 pamela-desktop kernel: [ 6198.157877] usb 1-3: usbfs: process 1500 (demond_nscan) did not claim interface 3 before use
Sep 8 08:52:10 pamela-desktop kernel: [ 6198.157884] usb 1-3: usbfs: process 1500 (demond_nscan) did not claim interface 3 before use
Sep 8 08:52:10 pamela-desktop kernel: [ 6198.157891] usb 1-3: usbfs: process 1500 (demond_nscan) did not claim interface 3 before use
答案1
限制logrotate的大小
打开/etc/logrotate.d/rsyslog
配置文件
sudo nano /etc/logrotate.d/rsyslog
该文件看起来像
/var/log/syslog
{
rotate 7
daily
missingok
notifempty
delaycompress
compress
postrotate
/usr/lib/rsyslog/rsyslog-rotate
endscript
}
....
...
size 100k
在括号中添加 eg 。之后它应该看起来像:
/var/log/syslog
{
rotate 7
size 100k
daily
missingok
notifempty
delaycompress
compress
postrotate
/usr/lib/rsyslog/rsyslog-rotate
endscript
}
请注意,这限制了轮换文件的文件大小,而不是实际的 syslog 文件。保存文件。下次启动 logrotate chron 作业时,它将限制轮换日志的大小。
限制当前系统日志的大小
要限制的大小/var/log/syslog
,您必须编辑/etc/rsyslog.d/50-default.conf
,并设置固定的日志大小。
通过更改以下行来添加或修改此设置/etc/rsyslog.d/50-default.conf
:
.*;auth,authpriv.none -/var/log/syslog
以下是rsyslog 手册:
输出通道通过 $outchannel 指令定义。其语法如下:
$outchannel name,file-name,max-size,action-on-max-size
name 是输出通道的名称(不是文件),file-name 是要写入的文件名,max-size 是允许的最大大小,action-on-max-size 是达到最大大小时要发出的命令。此命令始终只有一个参数。二进制是 action-on-max-size 中第一个空格之前的部分,其参数是该空格后面的所有内容。请注意,在将日志消息写入文件之前会查询 max-size。因此,请确保将此限制设置为合理的低值,以便任何消息都可以容纳。对于当前版本,将其设置为比预期低 1k 是有帮助的。max-size 必须始终以字节为单位指定 - 在开发阶段没有特殊符号(如 1k、1m 等)。请记住,$outchannel 仅用“名称”定义通道。它不会激活它。为此,您必须使用选择器行(见下文)。该选择器行包括通道名称以及前面的 $ 符号。示例可能是:。:omfile:$mychannel 在其当前形式中,输出通道主要提供限制输出文件大小的功能。为此,请指定最大大小。当达到此大小时,rsyslogd 将执行 action-on-max-size 命令,然后重新打开文件并重试。该命令应该类似于日志轮换脚本或类似的东西。
如果没有 action-on-max-size 命令或该命令无法解决问题,则文件将被关闭,并且永远不会被 rsyslogd 重新打开(当然,除非通过 huping 操作)。当我们第一次遇到超过 2gb 的文件的严重问题时,就集成了此逻辑,这可能导致 rsyslogd 转储核心。在这种情况下,停止写入单个文件更为合适。同时,rsyslogd 已修复以支持超过 2gb 的文件,但显然仅限于支持它的文件系统和操作系统版本。因此,强制执行 2gb 文件大小限制仍然有意义。
这里的最大大小是 1MB,请将此行放在该*.*; ...
行之前
$outchannel mysyslog,/var/log/syslog,1048576
并将*.*; ...
行改为
*.*;auth,authpriv.none :omfile:$mysyslog
使用以下命令重启 rsyslogd
sudo systemctl restart rsyslog.service
或者
sudo service rsyslog restart
要查看 rsyslog 状态类型
systemctl status rsyslog.service
答案2
您应该找出导致大量消息的原因,就好像您解决了这个问题,然后就修复了大型日志文件。
然而,在此之前,您可以根据以下之一放入日志轮换基础。
- 时间(例如每天轮换)
- 尺寸(例如当文件达到 10mb 时旋转)
系统已默认设置此项:/etc/logrotate.d/rsyslog
/var/log/syslog
{
rotate 7
daily
missingok
notifempty
delaycompress
compress
postrotate
reload rsyslog >/dev/null 2>&1 || true
endscript
}
从中你可以看到它将轮换 /var/log/syslog 文件日常的并保持7 份旋转文件。
您可以将其更改为在大小限制(例如 1mb)上旋转或减少其存储的副本数量。
警告:这不会解决问题的根本原因,但是它会为您赢得一些时间,因为它会阻止文件系统被填满。
- 来源:/etc/logrotate.d/rsyslog
- 来源:man logrotate
答案3
两周以来,我的 Lexmark Pro915 一直存在同样的问题。我做了两件事,现在它工作正常了。我重新安装了驱动程序。(不要以为这是有帮助的。)我取出了我正在使用的 USB 延长线,这使得总长度几乎达到 15 英尺,而且可能不完全兼容。我怀疑 Linux 系统的 Lexmark 驱动程序可能检测到信号较差或时间不准,并且想要每天向您报告 100 亿次。尝试以某种方式改善您的连接。
Logrotate 和类似的解决方案对我没有帮助。Kern.log 和 syslog 每天总共记录超过 1TB!如果您可以将 Logrotate 设置为每 12 分钟运行一次,它可能会有所帮助。