帮助中心 >  技术知识库 >  云服务器 >  服务器教程 >  Linux 自带的服务器日志清理工具logrotate

Linux 自带的服务器日志清理工具logrotate

2026-04-14 12:00:15 301

Linux 自带的服务器日志清理工具logrotate

欢迎来到8455线路检测中心技术小课堂,每天分享一个技术小知识。

logrotate是 Linux 系统中用于自动管理日志文件的工具。它可以按照指定的规则(如每天、每周、或文件大小)对日志文件进行轮转(重命名旧日志)、压缩、删除(保留指定份数),甚至可以在轮转后执行自定义脚本(如重启服务),从而避免日志文件无限增长耗尽磁盘空间。

为什么需要 logrotate?

系统和服务(如 rsyslog、nginx、httpd)会持续写入日志,时间久了文件会变得巨大,不仅占用磁盘,还会影响性能。

手动清理日志繁琐且容易出错,logrotate 实现了标准化、自动化管理。

logrotate 的工作原理

logrotate 通常由系统的定时任务(cron)每天自动运行一次。  

主程序:/usr/sbin/logrotate

配置文件:/etc/logrotate.conf(全局配置)  

应用配置目录:/etc/logrotate.d/(每个服务可单独放一个配置文件)

当 cron 触发 logrotate 时,它会读取所有配置,对符合条件的日志文件执行轮转操作。

logrotate 的核心配置指令

一个典型的 logrotate 配置由多个“规则块”组成,每个规则块指定要处理的日志文件路径及参数。常用指令如下:

image.png


配置文件示例

1. 全局配置 /etc/logrotate.conf

# 每周轮转

weekly

# 保留最近 4 个旧日志

rotate 4

# 创建新文件时使用默认权限

create

# 启用压缩

compress

# 包含 /etc/logrotate.d 下的所有配置

include /etc/logrotate.d

2. 针对特定服务的配置(例如 nginx)

在 /etc/logrotate.d/nginx 中:

/var/log/nginx/*.log {

    daily                # 每天轮转

    missingok            # 日志文件不存在也没关系

    rotate 14            # 保留 14 天

    compress             # 压缩旧日志

    delaycompress        # 延迟压缩(避免压缩当前正在写入的日志)

    notifempty           # 空文件不轮转

    create 0640 nginx adm # 轮转后新建日志文件,权限 0640,属主 nginx:adm

    sharedscripts        # 所有日志处理完后执行一次 postrotate

    postrotate

        if [ -f /var/run/nginx.pid ]; then

            kill-USR1`cat /var/run/nginx.pid`   # 通知 nginx 重新打开日志文件

        fi

    endscript

}


如何使用 logrotate

1. 手动测试配置是否正确

logrotate -d /etc/logrotate.conf

-d(debug)模式会模拟执行,不会实际轮转,只输出将要进行的操作,用于检查配置语法和预期行为。

2. 强制立即执行轮转

logrotate -vf /etc/logrotate.conf

-v:显示详细过程  

-f:强制执行,即使未到轮转周期也会触发

也可以只强制某个服务的配置:

logrotate -vf /etc/logrotate.d/nginx

3. 查看上次运行时间

logrotate 的状态文件通常位于 /var/lib/logrotate/logrotate.status,记录了每个日志文件上次轮转的时间。


常见问题

Q: 为什么我配置了 daily,但日志没有每天轮转?A: logrotate 依赖 cron 每天执行一次,检查是否满足轮转条件。如果系统时间被更改,或者状态文件记录的时间未到,就不会触发。可以手动用 -f 强制执行测试。

Q: 如何按大小轮转?A: 使用 size 指令,例如 size 100M。注意如果同时指定了周期(如 daily),则满足任一条件就会轮转。

Q: 轮转后服务无法写入新日志?A: 常见原因是 postrotate 脚本没有正确通知服务重新打开文件。确保脚本中使用的是 kill -HUP 或 kill -USR1 等信号,不同服务可能不同(如 rsyslog 用 kill -HUP,nginx 用 kill -USR1)。

Q: 能否压缩后保留更长时间?A: 可以,rotate 指定保留份数,结合 compress 即可。例如 rotate 30 保留 30 个旧日志,如果每天轮转,就是约 30 天的历史。


总结

logrotate 是系统自带的日志管理利器,通过简单的配置即可实现自动化轮转、压缩、清理。

配置文件结构清晰,支持灵活的参数组合。

大多数服务(如 rsyslog、httpd、nginx)在安装时就会在 /etc/logrotate.d/ 下生成默认配置,通常无需修改即可工作。

若需调整,直接编辑对应的配置文件,然后可用 logrotate -d 验证,再用 -f 测试效果。

相比于手动编写清理脚本,使用 logrotate 是更标准、更可靠的做法,推荐在生产环境中采用。


8455线路检测中心官网上拥有完善的技术支持库可供参考,大家可自行查阅,更多技术问题,可以直接咨询。同时,8455线路检测中心整理了运维必备的工具包免费分享给大家使用,需要的朋友可以直接咨询。

更多技术知识,8455线路检测中心期待与你一起探索。


提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题:
XML 地图