Linux日志怎么切割_Linux日志通过logrotate工具实现自动切割的方法

发布时间 - 2025-11-09 00:00:00    点击率:
logrotate是Linux日志管理工具,通过/etc/logrotate.conf和/etc/logrotate.d/配置文件实现日志的自动轮转、压缩与清理,支持按时间或大小切割,结合postrotate脚本可重载服务,确保日志高效管理。

Linux系统中日志文件会随着时间不断增长,过大的日志不仅占用磁盘空间,还会影响排查问题的效率。为了解决这个问题,logrotate 是一个被广泛使用的工具,它能自动对日志文件进行切割、压缩、归档和清理,无需手动干预。

logrotate 是什么?

logrotate 是 Linux 系统自带的日志管理工具,通常每天由 cron 自动调用执行。它可以按天、大小、周或月等条件对日志进行轮转(rotation),支持压缩旧日志、删除过期日志、发送通知等多种功能。

logrotate 配置文件位置

logrotate 的主配置文件是 /etc/logrotate.conf,而具体服务的日志切割规则通常放在 /etc/logrotate.d/ 目录下。比如 Nginx、Apache、MySQL 等服务安装后会自动在此目录添加自己的配置文件。

基本配置示例:切割自定义日志

假设你的应用生成日志在 /var/log/myapp.log,你想实现每日切割、保留7天、超过100M立即切割,并压缩旧日志。

创建配置文件:

sudo vim /etc/logrotate.d/myapp

写入以下内容:

/var/log/myapp.log {
    daily
    missingok
    rotate 7
    compress
    delaycompress
    notifempty
    create 644 root root
    postrotate
        systemctl kill -s HUP myapp.service > /dev/null 2>&1 || true
    endscript
}

说明各参数含义:

  • daily:每天轮转一次
  • missingok:日志不存在时不报错
  • rotate 7:只保留最近7个备份
  • compress:使用gzip压缩旧日志
  • delaycompress:延迟压缩,最新一轮不压缩(常与compress配合)
  • notifempty:如果日志为空,不进行轮转
  • create 644 root root:轮转后创建新日志文件,权限644,属主root
  • postrotate ... endscript:脚本块,在轮转后执行,常用于重载服务(如HUP信号)

按大小切割而非时间

如果你希望日志达到一定大小就切割,比如超过100MB就切,可以把 daily 换成:

size 100M

这样无论时间周期如何,只要文件超过100M就会触发切割。

测试 logrotate 配置是否正确

在正式运行前,建议先测试配置语法是否正确:

sudo logrotate -d /etc/logrotate.d/myapp

-d 表示 debug 模式,会输出执行过程但不真正执行。

若想强制运行一次看效果:

sudo logrotate -f /etc/logrotate.d/myapp

-f 表示强制执行,可用于验证实际效果。

查看 logrotate 执行记录

logrotate 默认通过 cron 每天执行一次,日志记录在:

/var/lib/logrotate/status

也可以查看系统日志来确认是否正常运行:

sudo grep logrotate /var/log/cron
sudo grep logrotate /var/log/syslog   # Ubuntu/Debian
sudo grep logrotate /var/log/messages  # CentOS/RHEL

常见问题处理

服务未重载导致日志写入失败?
某些程序不会自动识别新日志文件,需在 postrotate 中发送 HUP 信号或重启服务。

权限不足?
确保 logrotate 运行用户(通常是 root)有权限读写日志文件和目录。

日志没被切割?
检查配置语法、路径是否正确、是否有执行权限,再用 -d 模式调试。

基本上就这些。logrotate 功能强大且稳定,合理配置后可长期免维护地管理各类日志文件。关键是根据业务需求选择合适策略——按时间还是按大小,并设置合理的保留周期。


# mysql  # linux  # centos  # go  # apache  # nginx  # app  # ubuntu  # 工具  # var  # 配置文件  # 是否正确  # 自己的  # 是一个  # 就会  # 如果你  # 放在  # 在此  # 还会  # 你想 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: JavaScript如何操作视频_媒体API怎么控制播放  JavaScript常见的五种数组去重的方式  如何确认建站备案号应放置的具体位置?  英语简历制作免费网站推荐,如何将简历翻译成英文?  C++时间戳转换成日期时间的步骤和示例代码  标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南  如何批量查询域名的建站时间记录?  Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层  如何快速使用云服务器搭建个人网站?  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧  Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试  Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】  Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】  网站制作大概多少钱一个,做一个平台网站大概多少钱?  Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明  油猴 教程,油猴搜脚本为什么会网页无法显示?  Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中  PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑  Laravel如何与Inertia.js和Vue/React构建现代单页应用  laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程  Android GridView 滑动条设置一直显示状态(推荐)  Laravel如何使用Blade模板引擎?(完整语法和示例)  佛山网站制作系统,佛山企业变更地址网上办理步骤?  php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】  Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理  如何快速上传自定义模板至建站之星?  JS中对数组元素进行增删改移的方法总结  深圳网站制作的公司有哪些,dido官方网站?  微信小程序 五星评分(包括半颗星评分)实例代码  JavaScript模板引擎Template.js使用详解  Android自定义控件实现温度旋转按钮效果  Java类加载基本过程详细介绍  使用spring连接及操作mongodb3.0实例  如何用免费手机建站系统零基础打造专业网站?  Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  php做exe能调用系统命令吗_执行cmd指令实现方式【详解】  微信小程序 HTTPS报错整理常见问题及解决方案  Laravel如何使用Blade组件和插槽?(Component代码示例)  Win11怎么设置默认图片查看器_Windows11照片应用关联设置  Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言  Angular 表单中正确绑定输入值以确保提交与验证正常工作  Laravel定时任务怎么设置_Laravel Crontab调度器配置  如何用VPS主机快速搭建个人网站?  如何注册花生壳免费域名并搭建个人网站?  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  实现点击下箭头变上箭头来回切换的两种方法【推荐】  Laravel如何发送系统通知?(Notification渠道示例)  怎么用AI帮你为初创公司进行市场定位分析?