1. 首页
  2. 技术知识

Logrotate如何实现每小时切割日志文件

目录

    一、Logrotate背景介绍

      1.1 安装

    二、logrotate配置介绍三、实现每小时切割日志文件

      3.1、添加 logrotate 配置文件3.2 执行命令3.3加入定时任务

    总结

一、Logrotate背景介绍

logrotate 程序是一个日志文件管理工具。

用来把旧的日志文件删除,并创建新的日志文件,我们把它叫做“转储”。

我们可以根据日志文件的大小,也可以根据其天数来转储,这个过程一般通过crontab 定时任务。

1.1 安装

一般在服务器初始化的时候这些工具都已经存在的,但是为了保险,还是手动安装一下:

  1. yum -y install logrotate

复制代码 服务简单的说明:

服务的主配置文件:/etc/logrotate.conf

在主配置中可以看到 include /etc/logrotate.d 说明我们可以将用户定义的配置直接放到这下面,系统会自动为我们执行。

当然,系统的并不能很好的满足我们需求。

二、logrotate配置介绍

再看看配置模板:

  1. 日志文件绝对路径 {
  2.     各种参数…
  3. }

复制代码 参数包含:

参数 说明
daily 每天轮替一次
weekly 每周轮替一次
monthly 每月轮替一次
yearly 每年轮替一次
rotate 保留几个轮替日志文件
ifempty 日志没有内容的时候也进行轮替
notifempty 若日志为空,则不进行轮替
create 旧日志文件轮替后创建新的日志文件
size 日志达到多少X行rotate
minsize 文件容量一定要超过多少后才进行rotate
nocompress 轮替但不进行压缩
compress 压缩轮替文件
dateext 轮替旧日志文件时,文件名添加-%Y %m %d形式日期,可用dateformat选项扩展配置。
dateformat .%s 对日期进行格式定制
nodateext 旧日志文件不使用dateext扩展名,后面序数自增如”*.log.1″
sharedscripts 作用域下文件存在至少有一个满足轮替条件的时候,执行一次prerotate脚本和postrotate脚本。
prerotate/endscript 在轮替之前执行之间的命令,prerotate与endscript成对出现。
postrotate/endscript 在轮替之后执行之间的命令,postrotate与endscript成对出现。
olddir 将轮替的文件移至指定目录下
missingok 如果日志文件不存在,继续进行下一个操作,不报错


三、实现每小时切割日志文件


3.1、添加 logrotate 配置文件

  1. vim /etc/logrotate.d/nginx

复制代码 内容如下:

  1. /data2/data/cp*log/cp.log
  2. {
  3. copytruncate   
  4. rotate 87600
  5. missingok
  6. ifempty
  7. dateext
  8. dateformat -%Y%m%d-%H
  9. sharedscripts
  10. postrotate
  11.     if [ -f /usr/local/openresty/nginx/logs/nginx.pid ]; then
  12.         kill -USR1 `cat /usr/local/openresty/nginx/logs/nginx.pid`
  13.     fi
  14. endscript
  15. }

复制代码
3.2 执行命令

  1.  //手动执行一次轮替:
  2.  /usr/sbin/logrotate -vf /etc/logrotate.d/nginx

复制代码 执行命令

  1. logrotate [-dv] [-f|–force] [-s|–state statefile] config_file ..

复制代码 执行命令选项

  1. # logrotate –help
  2. Usage: logrotate [OPTION…] <configfile>
  3.   -d, –debug              Don’t do anything, just test (implies -v) 不做实际处理,仅调试
  4.   -f, –force              Force file rotation 强制执行,忽视参数要求
  5.   -m, –mail=command        Command to send mail (instead of `/bin/mail’) 发送mail
  6.   -s, –state=statefile    Path of state file 查看状态文件
  7.   -v, –verbose            Display messages during rotation 轮替一次,并显示轮替过程信息
  8.   –version                Display version information 显示logrotate版本
  9. Help options:
  10.   -?, –help                Show this help message
  11.   –usage                  Display brief usage message

复制代码
3.3加入定时任务

  1. crontab -e

复制代码 每小时的59分进行切割 内容如下:

  1. # Logrotate
  2. 59  * * * * /usr/sbin/logrotate -vf /etc/logrotate.d/nginx

复制代码 这里只简单地介绍该种定时任务配置。

  1. #格式
  2. *(分钟) *(小时) *(天) *(月) *(周几) 用户 命令
  3. # 若分钟位值为 *,表示0-59之间的任意有效值;
  4. # 若分钟位值为 1,表示每小时的第1分钟;
  5. # 若分钟位值为 */5,表示每5分钟
  6. # 若分钟位值为10,20 表示每小时的第10分钟和第20分钟
  7. # 若分钟位值为10-12 表示每小时的第10、11、12分钟

复制代码 效果如下:

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持软件技术网。

原创文章,作者:starterknow,如若转载,请注明出处:https://www.starterknow.com/105204.html

联系我们