因此,基本上,gotop-cjbassi
我为了监控目的而不断运行一个命令 ( ),该命令显然开始出现问题。经过验证,每次运行时,systemd-journald
都会在 中连续写入此行/var/log/syslog
:
Apr 28 00:13:16 myHostName kernel: [46316.136892] audit: type=1400 audit(1588025596.856:20376494): apparmor="DENIED" operation="open" profile="snap.gotop-cjbassi.gotop-cjbassi" name="/proc/286/cmdline" pid=101679 comm="ps" requested_mask="r" denied_mask="r" fsuid=1000 ouid=0
目前占65GB (syslog.1
基本上是文件系统上剩余的所有空间)。
我在网上看到过很多帖子(1,2) 讲述了这一点logrotate
,但没有人解释如何使用它来简单地处理这种情况。(甚至不明白“旋转”是什么意思,它只是压缩文件但保留所有数据吗?如果是这样,那就不是一个解决方案)
我尝试阅读了一下手册,但它确实不太方便用户使用。无论如何,我在cd
-ing into之后尝试了这个命令/var/log
:
logrotate -f syslog.1
据说是为了强制旋转。该命令似乎已成功运行。但没有尺寸变化。
我可以嗎cat /dev/null > syslog.1
?
如果是这样,我宁愿这样做:sed -i '/cjbassi/d' ./syslog.1
但我试过了,sed
显然在删除之前会存储一个临时文件,其中包含有关要删除的内容的信息。因此,这使我无法成功运行此命令,因为它需要存储与原始文件相同数量级的大小,这意味着多了几 GB,而我的文件系统无法处理,因为我已经满了
答案1
如果文件名为syslog.1
,则表示它已被轮换。当前正在使用的日志文件为syslog
。
如果不需要,只需删除它。如果仍然需要,可以压缩它,但这也需要可用空间。由于文件应该压缩得很好,您可以尝试使用tmpfs
(RAM 支持)。
如果您删除该文件但空间尚未释放,则表明有人仍打开了该文件。
答案2
> /var/log/syslog.1
是的,如果您不关心日志文件中的内容,您可以。
如果您确实关心文件的其他内容,那么您可以grep -v snap.gotop-cjbassi.gotop-cjbassi > /var/log/syslogtemp && > /var/log/syslog.1 && mv /var/log/syslogtemp /var/log/syslog.1
确保有足够的可用空间来存储常规日志行。
Logrotate 设置位于 /etc/logrotate.conf 和 /etc/logrotate.d/* 中
在您的情况下,相关设置可能位于 /etc/logrotate.d/rsyslog 中,看起来有点像这样:
{
rotate 7
daily
missingok
notifempty
delaycompress
compress
postrotate
/usr/lib/rsyslog/rsyslog-rotate
endscript
}
由于选项 'delaycompress',logrotate 会将 syslog 旋转到 syslog.1 而不进行压缩。下次运行 logrotate 时,它会将 syslog 移动到 syslog.1 并将 syslog.1 压缩为 syslog.2.gz 。如果没有足够的磁盘空间来存放生成的 gz 文件,压缩当然会失败。