当前位置: 首页 > news >正文

Linux 之 logrotate 【日志分割】

简介

logrotate 是一个用于管理日志文件的工具。它可以自动对日志文件进行轮转、压缩、删除等操作,以防止日志文件无限增长占用过多磁盘空间。logrotate 通常作为一个守护进程定期运行,也可以通过 cron 任务来调度执行

工作原理

  1. 按照配置文件中的规则,定期检查要管理的日志文件。
  2. 如果满足轮转条件(例如达到指定的时间间隔、文件大小等),logrotate 会执行以下操作:
    • 复制当前日志文件(如果使用了 copytruncate 参数,则是先复制再清空原文件)。
    • 重命名复制后的文件,添加轮转编号。
    • 根据配置对旧日志文件进行压缩(如果配置了 compress 参数)。
    • 删除超过保留数量的旧日志文件。
  3. 完成日志文件的轮转操作后,logrotate 会更新相关的状态信息,以便下次运行时能够正确判断日志文件的状态。

相关信息

命令参数

  1. copytruncate:用于在切割日志文件时,先复制日志文件内容,然后清空原日志文件,而不是移动原日志文件。这样可以保证在切割日志文件时,应用程序仍然可以向原日志文件写入日志。
  2. compress:对轮转后的旧日志文件进行压缩,通常使用 gzip 压缩格式。
  3. daily/weekly/monthly:指定日志文件的轮转频率,可以是每天、每周或每月。
  4. rotate:指定保留的日志文件轮转数量。例如,rotate 5表示保留最近的 5 个轮转后的日志文件。
  5. size:根据日志文件的大小进行轮转。例如,size 100k表示当日志文件达到 100KB 时进行轮转。

配置目录:/etc/logrotate.conf

独立配置目录:/etc/logrotate.d/xxx

查看版本信息:

logrotate --version

 

logrotate 的主配置文件通常是 /etc/logrotate.conf。此外,还可以在 /etc/logrotate.d/ 目录下创建单独的配置文件,每个配置文件对应一个要管理的日志文件或一组日志文件

1. 手动执行 logrotate
可以直接运行 logrotate 命令来执行默认配置文件 /etc/logrotate.conf。如果要执行特定的配置文件,可以这样:logrotate /path/to/custom.conf2. 查看 logrotate 状态
使用 logrotate -d [配置文件路径] 可以进行模拟执行,即显示如果执行 logrotate 会发生的操作,但不会实际修改日志文件。这对于检查配置文件的正确性很有用3. 强制执行 logrotate
logrotate -f [配置文件路径] 可以强制进行日志轮转,即使日志文件没有满足通常的轮转条件4. 输出详细信息
logrotate -v [配置文件路径] 会输出详细的执行过程信息,帮助你了解 logrotate 具体在做什么以mylog 为例# 查看模拟执行效果
logrotate -d /etc/logrotate.d/mylog# 强制执行日志轮转
logrotate -f /etc/logrotate.d/mylog# 以详细模式执行
logrotate -v /etc/logrotate.d/mylog

应用示例

场景:以openresty 中的nginx 日志为例 进行切割

切换到 /etc/logrotate.d 目录下

创建 openresty_nginx 文件(文件名随意) 并进行如下的配置

相关命令

#切换到配置目录
cd /etc/logrotate.d#创建新的配置文件
touch openresty_nginx#编辑文件
vi openresty_nginx

openresty_nginx 文件内容添加如下的配置信息

/usr/local/openresty/nginx/logs/*.log {su root rootdailyrotate 7missingoknotifemptycompressdelaycompresspostrotateif [ -f /usr/local/openresty/nginx/logs/nginx.pid ]; thensystemctl restart openresty.service fiendscript
}

手动 启动一次 验证配置是否正确

logrotate -vf /etc/logrotate.conf

完结撒花!!! 

问题

rotating pattern: /usr/local/openresty/nginx/logs/*.log  forced from command line (7 rotations)
empty log files are not rotated, old logs are removed
considering log /usr/local/openresty/nginx/logs/access.log
error: skipping "/usr/local/openresty/nginx/logs/access.log" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation.

 原因:日志文件(xxxlog)的父文件夹有“w”的组权限,通常只用所属组为root 才会出现这个错误

解决方案:

方法一:去掉对应日志父目录的“w”组权限 ---- g-w
方法二:在对应的logrotate配置文件中添加“su <dir_user> <dir_group>”

su root root (第一root 文件夹所属用户名,第二个root文件夹所属用户组)

http://www.lryc.cn/news/445905.html

相关文章:

  • Canvas简历编辑器-Monorepo+Rspack工程实践
  • uni-app - - - - -vue3使用i18n配置国际化语言
  • VSCode好用的插件推荐
  • Linux:八种重定向详解(万字长文警告)
  • set和map系列容器
  • 企业告警智策助手 | OPENAIGC开发者大赛企业组AI创作力奖
  • 函数组件、Hooks和类组件区别
  • 在线点餐新体验:Spring Boot 点餐系统
  • WPF中Viewbox的介绍和用法
  • QMT如何获取股票基本信息?如上市时间、退市时间、代码、名称、是否是ST等。QMT量化软件支持!
  • 2024年中国科技核心期刊目录(科普卷)
  • [解决]navicat连接mysql成功,但是使用jdbc连接不上
  • sar信号RD域的距离向傅里叶变换
  • 4 html5 web components原生组件详细教程
  • nginx+keepalived健康检查案例详解(解决nginx出现故障却不能快速切换到备份服务器的问题)
  • 什么是AI大模型?
  • 建造者模式__c#
  • 学习MRI处理过程中搜到的宝藏网站
  • 【C语言】const char*强制类型转换 (type cast)的告警问题
  • python-比较月亮大小/数组下标/人见人爱a+b
  • 什么是组态、组态的应用场景介绍
  • Java项目: 基于SpringBoot+mybatis+maven实现的智能推荐卫生健康系统分前后台(含源码+数据库+开题报告+任务书+毕业论文)
  • 本地生活商城开发搭建 同城O2O线上线下推广
  • 41. 如何在MyBatis-Plus中实现批量操作?批量插入和更新的最佳实践是什么?
  • LlamaIndex 的Node节点后处理器模块介绍
  • Dubbo 如何使用 Zookeeper 作为注册中心:原理、优势与实现详解
  • Linux:进程间通信之命名管道
  • UE4_后期处理七—仿红外线成像效果
  • 静态路由和默认路由(实验)
  • TCP: Textual-based Class-aware Prompt tuning for Visual-Language Model