如何限制系统日志的大小?

我的妈妈的电脑运行Ubuntu 12.04 LTS。 它一直工作得很好,但所有突然的系统日志都已经填满了。 填写我的意思是我刚刚删除了一个400GB大小的/var/log/syslog 。 是的 – 技嘉。

虽然我确信那里有一些有用的信息,但我不确定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 

您应该找出导致大量消息的原因,就像您修复此问题然后修复大型日志文件一样。

但是,在此之前,您可以在下面的其中一个上放入日志轮换。

  • 时间 (例如每天轮换)
  • 大小 (例如,当文件达到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

我和Lexmark Pro915在两周内遇到了同样的问题。 我做了两件事,现在工作正常。 我重新安装了驱动程序。 (不要以为这是有帮助的。)我拿出了我正在使用的USB扩展,这使得总长度接近15’,并且可能不完全兼容。 我怀疑用于Linux系统的Lexmark驱动程序可能会检测到信号不佳或时间不合适的信号,并希望每天100亿次告诉您这一信号。 尝试以某种方式改善您的连接。

Logrotate和类似的解决方案对我没有帮助。 Kern.log和syslog一起每天记录超过1TB! 如果您可以将其设置为每12分钟运行一次,Logrotate可能会有所帮助。

限制logrotate的大小

打开/etc/logrotate.d/syslog配置文件

 sudo nano /etc/logrotate.d/syslog 

该文件看起来很…… 喜欢

 /var/log/syslog { rotate 7 daily missingok notifempty delaycompress compress postrotate /usr/lib/rsyslog/rsyslog-rotate endscript } .... ... 

在括号中添加例如size 100ksize 100k 。 之后它应该看起来像:

 /var/log/syslog { rotate 7 size 100k daily missingok notifempty delaycompress compress postrotate /usr/lib/rsyslog/rsyslog-rotate endscript } 

请注意,这限制了旋转文件的文件大小,而不是实际的syslog文件。 保存文件。 下次logrotate chron作业启动时,它将限制旋转日志的大小。

限制当前syslog的大小

要限制/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只定义了一个带有“name”的频道。 它不会激活它。 为此,您必须使用选择线(见下文)。 该选择器行包括频道名称和前面的$符号。 样本可能是: :omfile:$ mychannel在当前forms中,输出通道主要提供对输出文件进行大小限制的function。 为此,请指定最大大小。 达到此大小时,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 service rsyslog restart