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

logrotate通过按时间或大小轮转日志,压缩并删除旧文件,结合daily、rotate、compress等参数及copytruncate或postrotate机制,实现nginxtomcat等服务的日志管理,避免磁盘空间耗尽。

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 } 

关键点说明:

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

NameGPT名称生成器

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

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

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

  • 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 方式,并定期检查配置是否生效。

上一篇
下一篇
text=ZqhQzanResources