Linux怎么清理系统日志_Linux如何限制日志文件大小【技巧】

胖涛小哥_9920

胖涛小哥_9920

2026-04-06

794人浏览

原创

真正要解决日志膨胀需配置logrotate轮转或journald限制,检查size/daily冲突、路径权限、cron触发;nohup日志须显式配置;清空用truncate或>,禁用echo/cat;根本在应用日志控制。

linux怎么清理系统日志_linux如何限制日志文件大小【技巧】

直接清空日志文件不是长久之计,真正要解决的是“日志不断膨胀”这个源头问题。限制大小 + 自动轮转才是生产环境的标准做法,手动清理只适合应急。

logrotate 配置不生效?检查这几个关键点

很多用户配了 /etc/logrotate.d/myapp 却发现日志没切、没压缩,常见原因有:

  • size 和 daily 不能共存:二者冲突,logrotate 只认其中一个触发条件;要用大小限制就删掉 daily
  • 路径没写对:配置里写的日志路径必须和应用实际写入的完全一致(包括软链接目标),建议用 readlink -f /var/log/myapp.log 确认真实路径
  • 权限不对:logrotate 默认以 root 身份运行,但如果日志文件属主是普通用户且没设 create,轮换后新文件可能无法写入
  • 没触发执行:logrotate 不是常驻进程,它靠 cron 每天调用一次 /etc/cron.daily/logrotate;可手动测试:sudo logrotate -d /etc/logrotate.conf(调试模式)或 sudo logrotate -f /etc/logrotate.conf(强制执行)

systemd-journald 日志爆满?别只盯着 /var/log/journal

journald 的日志行为和传统日志完全不同,journalctl --disk-usage 显示占用 2GB 并不意味着磁盘真被占满——它可能只是缓存在 /run/log/journal(内存临时目录)里没刷到持久区。

  • 先确认日志是否已持久化:检查 /var/log/journal 目录是否存在且非空;不存在就说明所有日志都在内存中,重启即消失
  • 限制持久化日志大小:编辑 /etc/systemd/journald.conf,重点设这三项:SystemMaxUse=500M、SystemMaxFileSize=50M、SystemKeepFree=100M
  • 改完必须重启服务:sudo systemctl restart systemd-journald,否则配置不加载
  • 临时清理:用 sudo journalctl --vacuum-size=200M 主动收缩,比删文件安全得多

nohup.out 或自定义脚本日志怎么管?logrotate 不认它

nohup.out、./app.log 这类由用户进程直接打开写入的日志,logrotate 默认不会扫描到,除非你显式把它加进配置。

  • 最稳妥的做法:在启动命令里就带时间戳重定向,比如 nohup ./myapp > app_$(date +\%Y\%m\%d).log 2>&1 &,避免单文件无限增长
  • 如果必须用固定名,就在 logrotate 配置中明确列出:/path/to/nohup.out { size 100M rotate 7 missingok notifempty }
  • 注意 notifempty 必须加上,否则空日志也会被轮换,导致后续写入失败(因为原文件被 rename 走了)
  • 不要用 echo "" > nohup.out 清空:它只写入一个换行符(1 字节),某些程序会因检测到非空而拒绝追加写入

紧急清空日志文件,用 truncate 还是 >?

两者都能把文件变为空,但适用场景不同:

  • 小文件(sudo > /var/log/messages 最快,shell 内置操作,无进程开销
  • 超大文件(>1GB):用 sudo truncate -s 0 /var/log/kern.log 更高效,不会读取文件内容,也不会触发 page cache 压力
  • 绝对不要用 cat /dev/null > file:语义正确但多一次 fork+exec,没必要;更糟的是 echo > file,它留 1 字节,可能让 tail -F 失效或引发应用异常
  • 清空前先确认服务是否还在写:比如 lsof +D /var/log 看哪些进程持有着日志文件句柄,否则清空后旧句柄仍指向已被截断的 inode,磁盘空间不会立即释放
真正难的不是“怎么删”,而是“删完之后日志又回来了”。配置 logrotate 或 journald 限制只是第一步,还得确认应用本身没开 debug 级别、没漏写日志关闭逻辑、没把 stderr 直接重定向到某个固定文件里——这些地方一旦失控,再好的轮转配置也压不住。
PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

2023.09.22

529

3

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

2024.03.01

1658

6

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

3770

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3273

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2353

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

5710

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

5362

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

3173

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

2665

4

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.4万人学习