欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 旅游 > Linux 之 logrotate 【日志分割】

Linux 之 logrotate 【日志分割】

2024/10/24 13:24:47 来源:https://blog.csdn.net/sszdzq/article/details/142517937  浏览:    关键词: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文件夹所属用户组)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com