当前位置: 代码网 > 服务器>服务器>Linux > Linux使用journalctl与日志轮转清理日志的具体教程

Linux使用journalctl与日志轮转清理日志的具体教程

2026年08月28日 Linux 我要评论
linux 服务器运行时间长了,日志文件很容易越积越多。常见的占用来源主要有:/var/log//var/log/journal/应用程序自己的日志目录nginx、mysql、docker 等服务日志

linux 服务器运行时间长了,日志文件很容易越积越多。常见的占用来源主要有:

/var/log/
/var/log/journal/
应用程序自己的日志目录
nginx、mysql、docker 等服务日志

如果磁盘空间突然变小,可以先从日志开始排查。

1. 先看日志占用了多少空间

先查看 /var/log

du -sh /var/log/*

也可以按大小排序:

du -h /var/log/* | sort -h

如果想看 systemd 日志占用:

journalctl --disk-usage

可能看到:

archived and active journals take up 2.8g in the file system.

说明 journal 已经占用了接近 3gb。

2. 使用 journalctl 清理旧日志

如果只想保留最近 7 天:

journalctl --vacuum-time=7d

只保留最近 3 天:

journalctl --vacuum-time=3d

也可以直接限制日志总大小,比如保留 500mb:

journalctl --vacuum-size=500m

执行后再次查看:

journalctl --disk-usage

一般就能看到明显下降。

3. 不要直接乱删 journal 文件

有些人看到:

/var/log/journal/

占用很大,就直接:

rm -rf /var/log/journal/*

虽然能快速释放空间,但不推荐这么处理。

更稳妥的方法还是:

journalctl --vacuum-time=7d

或者:

journalctl --vacuum-size=500m

这样由 systemd 自己处理日志文件,不容易造成异常。

4. 限制 journal 最大占用

如果服务器经常出现日志越来越大的情况,可以直接限制 journald。

编辑:

nano /etc/systemd/journald.conf

找到或者增加:

systemmaxuse=500m
systemkeepfree=1g
maxretentionsec=7day

其中:

systemmaxuse      journal 最大磁盘占用
systemkeepfree    至少给磁盘保留多少空间
maxretentionsec  日志最长保留时间

修改完成后重启:

systemctl restart systemd-journald

这样以后日志就不会无限增长。

5. 普通日志文件靠 logrotate 管理

除了 journal,linux 上很多服务会直接写日志文件,例如:

/var/log/nginx/access.log
/var/log/nginx/error.log
/var/log/mysql/
/var/log/syslog

这些通常由 logrotate 负责自动轮转。

查看配置:

cat /etc/logrotate.conf

服务自己的配置一般位于:

ls /etc/logrotate.d/

例如 nginx:

cat /etc/logrotate.d/nginx

6. logrotate 是怎么工作的

一个简单配置可能是:

/var/log/myapp/*.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
}

含义分别是:

daily       每天轮转
rotate 7    保留 7 份旧日志
compress    压缩旧日志
missingok   文件不存在不报错
notifempty  空日志不处理

轮转以后,原来的:

app.log

可能变成:

app.log
app.log.1
app.log.2.gz
app.log.3.gz

这样日志就不会一直写进同一个越来越大的文件。

7. 给自己的应用配置日志轮转

假设 node.js 项目日志是:

/opt/myapp/logs/app.log

可以创建:

nano /etc/logrotate.d/myapp

写入:

/opt/myapp/logs/*.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
    copytruncate
}

copytruncate 会先复制旧日志,然后清空原文件。

对于一些不会主动重新打开日志文件的程序,这种方式比较方便。

配置后可以测试:

logrotate -d /etc/logrotate.d/myapp

-d 只是调试,不会真正执行。

确认没问题后再正常使用。

8. 单个日志文件特别大怎么办

先查看:

ls -lh /var/log/

如果发现某个日志已经几十 gb,不建议直接删除正在使用的文件。

可以先清空:

truncate -s 0 /var/log/xxx.log

例如:

truncate -s 0 /var/log/nginx/access.log

这样文件还在,只是内容被清空,正在运行的程序通常也不会因为日志文件突然消失而出问题。

不过清理之前最好先确认日志是否还需要保留。

9. 一套常用排查流程

服务器磁盘异常时,我一般先执行:

df -h

然后:

du -sh /var/log/*

检查 journal:

journalctl --disk-usage

如果 journal 太大:

journalctl --vacuum-time=7d

如果是普通日志文件太大,就继续检查:

ls -lh /var/log/

最后再看对应服务的 logrotate 配置。

日志清理不难,真正需要解决的是“为什么一直增长”。临时删掉几个 gb 只能缓解一次,长期运行的服务器最好同时配置 journald 大小限制和 logrotate,否则过一段时间磁盘还是会再次被占满。

以上就是linux使用journalctl与日志轮转清理日志的具体教程的详细内容,更多关于linux journalctl与日志轮转清理日志的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com