首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Ubuntu:大型syslog和kern.log文件

Ubuntu:大型syslog和kern.log文件
EN

Stack Overflow用户
提问于 2016-02-25 21:00:03
回答 4查看 71.3K关注 0票数 42

登录到我的Ubuntu机器,我收到一个警告,我正在耗尽磁盘空间。追溯过去,我发现是系统日志,尤其是kern.log占用了我的1TB磁盘。

代码语言:javascript
代码运行次数:0
运行
复制
-rw-r----- 1 syslog adm 240G Feb 25 14:22 kern.log
-rw-r----- 1 syslog adm 516G Feb 21 07:59 kern.log.1
-rw-r----- 1 syslog adm 1.1K Feb 15 07:39 kern.log.2.gz
-rw-r----- 1 syslog adm  19K Feb  7 07:56 kern.log.3.gz
-rw-r----- 1 syslog adm  37K Feb  1 07:45 kern.log.4.gz
-rw-r----- 1 syslog adm  23G Feb 25 14:52 syslog
-rw-r----- 1 syslog adm  25G Feb 25 08:11 syslog.1
-rw-r----- 1 syslog adm 1.6G Feb 24 07:49 syslog.2.gz
-rw-r----- 1 syslog adm 1.7G Feb 23 08:18 syslog.3.gz
-rw-r----- 1 syslog adm 3.4G Feb 22 08:19 syslog.4.gz
-rw-r----- 1 syslog adm 3.6G Feb 21 07:59 syslog.5.gz
-rw-r----- 1 syslog adm 6.9G Feb 20 07:38 syslog.6.gz
-rw-r----- 1 syslog adm 7.3G Feb 19 07:36 syslog.7.gz

从上面的片段中,您可以很容易地发现kern.log和kern.log.1占用了我的1TB磁盘的80%。我可以通过删除文件来获得空间,但我认为这不会解决问题。

有没有人知道这个问题可能是什么?我看到您可以通过以下方法获得日志记录级别:

代码语言:javascript
代码运行次数:0
运行
复制
cat /proc/sys/kernel/printk

我得到了

代码语言:javascript
代码运行次数:0
运行
复制
4    4    1    7
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-02-26 18:11:50

你查过那些文件的内容了吗?很明显,您的服务器发生了一些事情,导致事件被生成。解决导致这一问题的任何问题,您的日志应该恢复到正常大小。

若要临时解决问题,请键入

代码语言:javascript
代码运行次数:0
运行
复制
echo "" > /var/log/kern.log
echo "" > /var/log/syslog
service syslog restart
journalctl --vacuum-size=50M

您需要成为根用户:输入sudo su,密码,然后输入上面的命令

票数 22
EN

Stack Overflow用户

发布于 2020-06-20 18:25:57

这是一个老问题,但前两个答案都不是很好的解决办法:

  • 如果您修复了基础系统问题(答案是logrotate),那么所接受的答案并不能解释为什么磁盘问题会消失,而且您的系统可能会一直写入日志并在您找出根本问题之前填满您的磁盘。
  • 另一个答案是完全删除和禁用日志,这不是一个很好的方法,因为它忽略了根本的问题。另外,当您发现其他系统问题时,您可能会希望稍后使用这些日志文件--禁用syslog会使跟踪未来问题变得更加困难!

相反,这里有一个更安全的方法,允许您在回收磁盘空间的同时保留日志文件,同时也可以阻止日志文件再次这样做。

  1. 安全地清除日志:在查看(或备份)日志以确定系统问题后,通过键入> /var/log/syslog (包括>)清除它们。您可能需要成为根用户,在这种情况下输入sudo su、您的密码,然后输入上面的命令)。
  • 然后重新启动syslog服务( systemctl restart syslogservice syslog restart)。
  1. 然后,可以使用logrotate强制日志在达到一定大小时自动旋转和删除。在本例中,您可以使用sudo nano /etc/logrotate.d/rsyslog编辑配置并添加一行:
代码语言:javascript
代码运行次数:0
运行
复制
/var/log/syslog
{
    rotate 7
    daily
    maxsize 1G # add this line
    missingok
    notifempty
    delaycompress
    compress
    postrotate
        /usr/lib/rsyslog/rsyslog-rotate
    endscript
}
  • 这将迫使您的syslog“旋转”(即,创建一个新的日志文件并将前一个日志文件存档),或者在该文件成为1GB之后(以第一位为准)。请注意,rotate 7意味着您的系统将只保留7次总的syslog备份,因此它只能占用7GB的空间。
  • 注意:您可以更改maxsizerotate N和其他设置以自定义日志--使用命令man logrotate查看更多信息。
  1. 您可能需要在文件的第二部分中添加相同的设置,它控制其他日志文件的行为(例如,kern.log用于内核事件,auth.log用于身份验证事件,等等)。此设置将使每个其他日志文件总共只占用4GB:
代码语言:javascript
代码运行次数:0
运行
复制
...
{
    rotate 4
    weekly
    maxsize 1G
...
}

这将允许您的系统在不填充磁盘的情况下继续记录事件。

有关更多信息,请参见手册相似问题

票数 114
EN

Stack Overflow用户

发布于 2021-10-06 12:25:10

  • 日志文件(EG系统日志、内核日志)的旋转由logrotate处理。
  • 输入以下命令以修改logrotate配置:
代码语言:javascript
代码运行次数:0
运行
复制
sudo nano /etc/logrotate.d/rsyslog
  • 在日志文件的条目下,如果没有配置,则添加下面所示的配置,否则修改现有配置,使之类似于下面所示的配置。
  • 配置由一行或多行以大括号括起来的指令组成,输入man logrotate并向下滚动到DIRECTIVES部分以获得这些指令的说明。
  • 特别是,请确保包括size 100M行,其中可以根据您希望日志文件占用的最大大小修改100M,并确保没有基于时间的旋转指令、EG dailyweekly等。
代码语言:javascript
代码运行次数:0
运行
复制
{
        rotate 7
        size 100M
        missingok
        ifempty
        delaycompress
        compress
        postrotate
                /usr/lib/rsyslog/rsyslog-rotate
        endscript
}
  • 日志文件的轮转可以由cron安排,默认情况下每天进行。
  • 您可以修改此行为,以安排日志文件每小时轮换一次,而不是每天使用以下命令:
代码语言:javascript
代码运行次数:0
运行
复制
sudo mv /etc/cron.daily/logrotate /etc/cron.hourly/logrotate
  • 有可能禁用用于cronlogrotate脚本以支持systemd计时器。
  • 您可以确保logrotatelogrotate脚本不会被禁用以支持systemd计时器,如下所示:
  • 输入命令sudo nano /etc/cron.hourly/logrotate查看用于logrotatecron脚本的内容(如果以前没有移动脚本,则输入sudo nano /etc/cron.daily/logrotate )
  • 检查以下四行是否存在,如果有,可以在每一行的开头放置一个#来注释它们,或者完全删除这些行:
代码语言:javascript
代码运行次数:0
运行
复制
# skip in favour of systemd timer
if [ -d /run/systemd/system ]; then
    exit 0
fi
  • 还可以使用以下命令手动强制日志文件的旋转:
代码语言:javascript
代码运行次数:0
运行
复制
sudo logrotate --force --verbose /etc/logrotate.conf
  • 要简单地查看上面的命令将执行哪些操作,而不实际旋转或删除任何日志文件,请使用以下命令:
代码语言:javascript
代码运行次数:0
运行
复制
sudo logrotate --force --debug /etc/logrotate.conf
  • 如果您发现/var/log/journal文件夹也变得非常大,根据这个答案,您可以使用以下命令清除它:
代码语言:javascript
代码运行次数:0
运行
复制
sudo journalctl --vacuum-size=100M
  • 要使这种情况在每次logrotatecron调用时自动实现,请输入命令sudo nano /etc/cron.hourly/logrotate (如果以前没有移动脚本,则输入sudo nano /etc/cron.daily/logrotate )并插入行journalctl --vacuum-size=100M (NB不包括sudo)。
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35638219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档