首页 > 运维 > linux运维 > 正文

Linux日志怎么切割_Linux日志通过logrotate按服务名切割的详细配置教程

蓮花仙者
发布: 2025-11-11 09:04:03
原创
838人浏览过
logrotate通过按时间或大小轮转日志,压缩并删除旧文件,结合daily、rotate、compress等参数及copytruncate或postrotate机制,实现Nginx和Tomcat等服务的日志管理,避免磁盘空间耗尽。

linux日志怎么切割_linux日志通过logrotate按服务名切割的详细配置教程

Linux系统中日志文件会随着时间不断增长,如果不加以管理,可能占用大量磁盘空间,甚至影响系统性能。logrotate 是 Linux 下用于自动轮转、压缩和清理日志文件的工具,支持按大小、时间(如每天、每周)等条件进行切割,并可针对不同服务做独立配置。

logrotate 基本工作原理

logrotate 通常由 cron 每天自动执行,读取配置文件判断哪些日志需要处理。它能完成以下操作:

  • 移动或重命名旧日志文件(轮转)
  • 创建新的空日志文件供服务写入
  • 压缩历史日志节省空间
  • 删除超过保留期限的日志
  • 在轮转前后执行自定义脚本(如重启服务)

配置文件一般位于:
- 主配置文件:/etc/logrotate.conf
- 配置片段目录:/etc/logrotate.d/(推荐将各服务配置放在此目录下)

按服务名切割日志的配置方法

以常见的 Nginx 和 Tomcat 为例,展示如何为特定服务设置独立的日志切割策略。

1. 为 Nginx 配置日志切割

创建配置文件:

vim /etc/logrotate.d/nginx

写入如下内容:

/var/log/nginx/*.log {
    daily
    missingok
    rotate 7
    compress
    delaycompress
    notifempty
    create 0644 www-data adm
    sharedscripts
    postrotate
        systemctl reload nginx > /dev/null 2>&1 || true
    endscript
}
登录后复制

参数说明:

  • daily:每天轮转一次
  • missingok:日志不存在时不报错
  • rotate 7:最多保留7个旧日志(即 log.1 到 log.7.gz)
  • compress:使用 gzip 压缩旧日志
  • delaycompress:延迟压缩,最新一轮不立即压缩(常与 compress 配合使用)
  • notifempty:日志为空时不轮转
  • create 0644 www-data adm:轮转后创建新日志文件,权限为 0644,属主 www-data,属组 adm
  • sharedscripts:所有日志只执行一次 postrotate 脚本
  • postrotate ... endscript:轮转完成后重新加载 Nginx,使其指向新日志文件

2. 为 Tomcat 配置日志切割

Tomcat 日志通常位于 /opt/tomcat/logs/,比如 catalina.out。

创建配置文件:

vim /etc/logrotate.d/tomcat

内容如下:

/opt/tomcat/logs/catalina.out {
    copytruncate
    daily
    rotate 30
    compress
    missingok
    notifempty
    size 100M
}
登录后复制

关键点说明:

NameGPT名称生成器
NameGPT名称生成器

免费AI公司名称生成器,AI在线生成企业名称,注册公司名称起名大全。

NameGPT名称生成器 0
查看详情 NameGPT名称生成器
  • copytruncate:复制日志后清空原文件,适用于无法重载进程的服务(如 Tomcat 后台运行不输出到 syslog)
  • size 100M:当日志超过 100MB 时立即触发轮转,无论是否到“每天”时间点
  • 没有 postrotate 脚本,因为使用 copytruncate 不需要通知服务

⚠️ 注意:copytruncate 有一定风险,在复制和截断之间可能丢失少量日志,但对大多数场景可接受。

测试与调试 logrotate 配置

配置完成后,建议先手动测试,避免正式运行出错。

1. 模拟运行(查看会做什么):

logrotate -d /etc/logrotate.d/nginx

-d 表示 debug 模式,不会真正执行操作,仅输出计划行为。

2. 强制执行一次轮转(测试实际效果):

logrotate -f /etc/logrotate.d/nginx

-f 表示强制轮转,可用于验证配置是否生效。

3. 查看状态信息:

logrotate 记录上次处理时间的状态文件在:
/var/lib/logrotate/status

可用命令查看:
cat /var/lib/logrotate/status

常见问题与优化建议

服务未重新加载导致日志仍写入旧文件?
确保在 postrotate 中正确发送信号或 reload 服务。例如 Apache 使用 reload,Java 应用若支持 SIGHUP 可用 kill -HUP。

想按周或每月切割?
替换 dailyweeklymonthly 即可。

想同时满足时间和大小条件?
可以并列使用,只要任一条件满足就会触发轮转。例如既有 daily 又有 size 100M。

多个服务共用一个日志目录怎么办?
可在配置中列出多个路径,或使用通配符,但建议每个服务单独配置,便于维护。

基本上就这些。合理利用 logrotate,能让系统日志整洁有序,避免磁盘被撑爆。关键是根据服务特点选择 copytruncate 还是 postrotate 方式,并定期检查配置是否生效。

以上就是Linux日志怎么切割_Linux日志通过logrotate按服务名切割的详细配置教程的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号