精华内容
下载资源
问答
  • 本篇文章主要介绍了Linux使用logrotate来切割日志文件,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • Logrotate实现每小时切割日志文件一、Logrotate背景介绍1.1 安装 一、Logrotate背景介绍 logrotate 程序是一个日志文件管理工具。用来把旧的日志文件删除,并创建新的日志文件,我们把它叫做“转储”。我们可以根据...

    一、Logrotate背景介绍

    logrotate 程序是一个日志文件管理工具。用来把旧的日志文件删除,并创建新的日志文件,我们把它叫做“转储”。我们可以根据日志文件的大小,也可以根据其天数来转储,这个过程一般通过crontab 定时任务。

    1.1 安装

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

    yum -y install logrotate
    

    服务简单的说明:
    服务的主配置文件:/etc/logrotate.conf

    在这里插入图片描述

    在主配置中可以看到 include /etc/logrotate.d 说明我们可以将用户定义的配置直接放到这下面,系统会自动为我们执行。当然,系统的并不能很好的满足我们需求。

    二、logrotate配置介绍

    再看看配置模板:

    日志文件绝对路径 {
        各种参数...
    }
    

    参数包含:

    参数 说明
    daily 每天轮替一次
    weekly 每周轮替一次
    monthly 每月轮替一次
    yearly 每年轮替一次
    rotate 保留几个轮替日志文件
    ifempty 日志没有内容的时候也进行轮替
    notifempty 若日志为空,则不进行轮替
    create 旧日志文件轮替后创建新的日志文件
    size 日志达到多少后进行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 配置文件:

    vim /etc/logrotate.d/nginx
    

    内容如下:

    /data2/data/cp*log/cp.log
     {
    copytruncate    
    rotate 87600
    missingok
    ifempty
    dateext
    dateformat -%Y%m%d-%H 
    sharedscripts
    postrotate
        if [ -f /usr/local/openresty/nginx/logs/nginx.pid ]; then
            kill -USR1 `cat /usr/local/openresty/nginx/logs/nginx.pid`
        fi
    endscript
    }
    

    3.2 执行命令:

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

    执行命令

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

    执行命令选项

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

    3.3加入定时任务

    crontab -e
    

    每小时的59分进行切割 内容如下:

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

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

    #格式
    *(分钟) *(小时) *() *() *(周几) 用户 命令
    # 若分钟位值为 *,表示0-59之间的任意有效值;
    # 若分钟位值为 1,表示每小时的第1分钟;
    # 若分钟位值为 */5,表示每5分钟
    # 若分钟位值为10,20 表示每小时的第10分钟和第20分钟
    # 若分钟位值为10-12 表示每小时的第101112分钟
    

    效果如下:
    在这里插入图片描述

    展开全文
  • Linux脚本定时切割日志文件

    千次阅读 2018-10-14 17:30:02
    测试环境的日志没有定时切割,时间久了,文件比较大,不方便搜索查找。所以尝试写了下脚本。...echo `date '+%Y-%m-%d %H:%M:%S'`'初始化切割日志文件为:'$monitor_file &gt;&gt; /app/logs/split/split.lo...

     测试环境的日志没有定时切割,时间久了,文件比较大,不方便搜索查找。所以尝试写了下脚本。

    1.脚本如下:

    #!/bin/sh
    log_dir='/app/logs/split'
    monitor_file=$1
    echo `date '+%Y-%m-%d %H:%M:%S'`'初始化切割日志文件为:'$monitor_file >> /app/logs/split/split.log
    if [ ! $1 ]
    then
        echo `date '+%Y-%m-%d %H:%M:%S'`'输入参数为空,使用默认路径:/app/wktrait/apache-tomcat-8.5.29/logs/catalina.out' >> /app/logs/split/split.log
        monitor_file=/app/XXX/apache-tomcat-8.5.29/logs/catalina.out #tomcat目录下的catalina.out文件的绝对路径
    fi
    log_name=`basename $monitor_file`
    echo `date '+%Y-%m-%d %H:%M:%S'`'切割文件名称为:'$log_name   >> /app/logs/split/split.log
    file_size=`du $monitor_file | awk '{print $1}'`
    echo `date '+%Y-%m-%d %H:%M:%S'`'切割文件大小为:'$file_size   >> /app/logs/split/split.log
    if [ $file_size -ge 1024000 ]
    then
        echo `date '+%Y-%m-%d %H:%M:%S'`'文件大小大于 1024000 开始切割'   >> /app/logs/split/split.log
        if [ ! -d $log_dir ]
        then
            echo `date '+%Y-%m-%d %H:%M:%S'`'日志切割路径不存在,新建....'  >> /app/logs/split/split.log
            mkdir /app/logs/split  #创建保存切割文件目录,这个路径可以自行修改,保存到你想要的目录
        fi
        echo `date '+%Y-%m-%d %H:%M:%S'`'开始切割日志....'  >> /app/logs/split/split.log
        echo `date '+%Y-%m-%d %H:%M:%S'`'开始切割日志....'
        cp  $monitor_file  /app/logs/split/$log_name-`date +%Y%m%d%H%M%S`.log #保存日志文件
        echo `date '+%Y-%m-%d %H:%M:%S'`'日志切割完成。'   >> /app/logs/split/split.log
        echo `date '+%Y-%m-%d %H:%M:%S'`'日志切割完成。'
        echo `date '+%Y-%m-%d-%H:%M:%S'`'文件切割' >> /app/logs/split/split.log #记录切割日志
        echo `date '+%Y-%m-%d %H:%M:%S'`'开始清空源文件...' >> /app/logs/split/split.log
        echo `date '+%Y-%m-%d %H:%M:%S'`'开始清空源文件...'
        echo "" > $monitor_file  #清空tomcat的log/catalina.out文件内容
        echo `date '+%Y-%m-%d %H:%M:%S'`'清空源文件完成。'  >> /app/logs/split/split.log
        echo `date '+%Y-%m-%d %H:%M:%S'`'清空源文件完成。'
    fi
    

     脚本基本能实现切割功能,下一步就是定时了。网上搜索的是用的。

    2. 用 crontab -e 编辑定时器代码

       输入  crontab -e  命令在打开的窗口填写如下定时任务

        */1 * * * *  sh /app/script/splitLog.sh  /app/XXX/apache-tomcat-8.5.29/logs/catalina.out

        然后保存退出。

    参考链接:  https://www.jb51.net/article/97116.htm

    同时放上一个定时的介绍: https://www.cnblogs.com/mingforyou/p/3930636.html

     

     

    展开全文
  • Linux 使用 logrotate 来切割日志文件

    千次阅读 2018-01-23 11:01:16
    Linux 使用 logrotate 来切割日志文件 日志是了解服务运行状态的重要依据,但是输出的日志久了,日志就会变得非常大,甚至上百兆,会占用机器上面所有的存储空间。 Linux 自带的日志分割命令 logrotate ,...

    Linux 使用 logrotate 来切割日志文件

    日志是了解服务运行状态的重要依据,但是输出的日志久了,日志就会变得非常大,甚至上百兆,会占用机器上面所有的存储空间。

    Linux 自带的日志分割命令  logrotate ,可以按照时间、月、周分割日志,在日志的尾部灵活加上当前日期。

     

    1:切割 nginx 的配置文件实例

    /var/log/nginx/*log {

     create 0644 nginx nginx

     daily //按天切割日志文件

     rotate 10 //保留最新的 10 分日志文件,超过数量就会删除

     missingok //忽略不存在的文件

     notifempty //不分割空文件

     compress //对文件进行压缩

     olddir/data/nginx_logs/days 

     sharedscripts

     postrotate

    // 文件切割之后执行的命令

      /bin/kill-USR1 `cat/run/nginx.pid 2>/dev/null` 2>/dev/null||true

     endscript

    }

     

    logrotate 配置项详解:

    compress                                   通过gzip 压缩转储以后的日志

    nocompress                                不做gzip压缩处理

    copytruncate                              用于还在打开中的日志文件,把当前日志备份并截断;是先拷贝再清空的方式,拷贝和清空之间有一个时间差,可能会丢失部分日志数据。

    nocopytruncate                           备份日志文件不过不截断

    create mode owner group             轮转时指定创建新文件的属性,如create 0777 nobody nobody

    nocreate                                    不建立新的日志文件

    delaycompress                           compress 一起使用时,转储的日志文件到下一次转储时才压缩

    nodelaycompress                        覆盖 delaycompress 选项,转储同时压缩。

    missingok                                 如果日志丢失,不报错继续滚动下一个日志

    10 errors address                           专储时的错误信息发送到指定的Email 地址

    11 ifempty                                    即使日志文件为空文件也做轮转,这个是logrotate的缺省选项。

    12 notifempty                               当日志文件为空时,不进行轮转

    13 mail address                             把转储的日志文件发送到指定的E-mail 地址

    14 nomail                                     转储时不发送日志文件

    15 olddir directory                         转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统

    16 noolddir                                   转储后的日志文件和当前日志文件放在同一个目录下

    17 sharedscripts                           运行postrotate脚本,作用是在所有日志都轮转后统一执行一次脚本。如果没有配置这个,那么每个日志轮转后都会执行一次脚本

    18 prerotate                                 logrotate转储之前需要执行的指令,例如修改文件的属性等动作;必须独立成行

    19 postrotate                               logrotate转储之后需要执行的指令,例如重新启动 (kill -HUP) 某个服务!必须独立成行

    20 daily                                       指定转储周期为每天

    21 weekly                                    指定转储周期为每周

    22 monthly                                  指定转储周期为每月

    23 rotate count                            指定日志文件删除之前转储的次数,指没有备份,指保留个备份

    24 dateext                                  使用当期日期作为命名格式

    25 dateformat .%s                       配合dateext使用,紧跟在下一行出现,定义文件切割后的文件名,必须配合dateext使用,只支持 %Y %m %d %s 这四个参数

    26 size(minsize) log-size            当日志文件到达指定的大小时才转储,log-size能指定bytes(缺省)KB (sizek)MB(sizem).

    27 当日志文件 >= log-size 的时候就转储。 以下为合法格式:(其他格式的单位大小写没有试过)

    28 size = 5 或 size 5 >= 5 个字节就转储)

    29 size = 100k 或 size 100k

    30 size = 100M 或 size 100M

     

    2:如何启动 logrotate 的配置文件

     

    2.1 在 /etc/logrotate.d 目录下创建分割日志的配置文件 vpaas

     

    /opt/nohup.out {

            size 1k 

    dateext

    create

    copytruncate

    }

     

    /opt/nohup.out : 将要被切割的日志文件

    dateext :  切割后的日志文件以当前日期结尾

    size:  切割日志文件的大小为 1 k

     

    2.2 启动日志文件

        logrotate -f /etc/logrotate.d/vpaas 

    展开全文
  • nginx 切割日志文件

    2019-09-22 00:57:57
    一、利用crontab 切割nginx日志文件(linux平台下) cat nginx_log.sh #!/bin/bash # 零点执行该脚本 # Nginx 日志文件所在的目录 LOGS_PATH=/data/opt/nginx/logs ## 获取昨天的 yyyy-MM-dd YESTERDAY=$...

    一、利用crontab 切割nginx日志文件(linux平台下)

    cat nginx_log.sh 
    
    #!/bin/bash
    # 零点执行该脚本
    # Nginx 日志文件所在的目录
    LOGS_PATH=/data/opt/nginx/logs
    ## 获取昨天的 yyyy-MM-dd
    YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)
    # 移动文件
    mv ${LOGS_PATH}/access.log ${LOGS_PATH}/access_${YESTERDAY}.log
    # 向 Nginx 主进程发送 USR1 信号。USR1 信号是重新打开日志文件
    kill -USR1 $(cat /data/opt/nginx/logs/nginx.pid)

    crontab -l

    # 凌晨0点,kill需要root权限
    0 0 * * * echo "password"| sudo -S /home/croot/script/nginx_log.sh

    效果如下:

     

    转载于:https://www.cnblogs.com/yxy-linux/p/6892903.html

    展开全文
  • linux 切割日志文件

    2020-10-15 20:13:27
    //以200m大小每个,把log.txt文件切割为多个new_log 结尾以 aa,ab,..结束 split -b200m log.txt new_log
  • logrotate切割日志文件

    千次阅读 2015-07-28 23:22:36
    logrotate是linux上自带的强大的日志管理工具,通过logrotate可以进行日志的定期切割、压缩、备份等。 logrotate的配置文件位置在/etc/logrotate.conf中,自定义配置文件位于.../root/test/test.log #日志文件路径
  • 现有的日志都会存在access.log文件中,但是随着时间的推移,这个文件的内容会越来越多,体积会越来越大,不便于查看,所以我们可以通过把这个大的日志文件切割为多份不 同的小文件作为日志,切割规则可以以天为单位...
  • 程序在运行的时候为了了解运行状态,会输出日志文件,时间久了日志文件会变得非常大,甚至达到GB级别。我在golang应用里使用logrus包来打日志,配置和使用都很方便,就是没有日志分割的功能,应用在线上运行一个月后...
  • linux上切割日志文件

    千次阅读 2018-02-09 16:41:55
    最近系统上线后日志量剧增,需要按照日期每天定时将日志切割后保留7天。参照了网上资料写了以下切割代码:#!/bin/sh function rotate() { logs_path=$1 echo Rotating Log: $1 cp ${logs_path} ${logs_path}.$...
  • # 删除当天日志文件 已注释,交给python完成 # 启动python执行日志处理脚本 设置定时执行 0 0 * * * bash /home/wwwlogs/cut.sh #每日0分0时执行 crond命令 /bin/systemctl start crond /bin/...
  • 按天切割日志文件

    2019-09-11 10:04:02
    apache 修改httpd.conf # # This is the main Apache HTTP server configuration file. It contains the # configuration directives that give the server its instructions. # See <URL:...
  • 在工作中可能会需要对nginx的日志实现自动分割,自己写了一个函数,大家如果觉得可以的话: 可以直接复制保存修改一下nginxPATH和 /opt/nginx/...#参数解释:$2 切割日志文件名称:access正确日志 error错误日志,...
  • split可以用来切割一个日志文件,这样便于处理日志。比如有一个12G的日志,需要删除某一行数据,知道行号,但用sed和vi比较慢, 就可以先用 split 切割 ,然后再删除那行,最后再重组合   二.使用说明 ...
  • # split命令用于切割文件 # -b SIZE: SIZE is an integer and optional unit (example: 10M is 10*1024*1024). Units are K, M, G, T, P, E, Z, Y (powers of 1024) or KB, MB, ... (powers of 1000). # -d -a 4表示...
  • Logrotate读取/etc/logrotate.d目录下的文件 这里的文件会被系统自动执行 logrotate是作为linux系统日志的管理工具存在。他可以轮换,压缩,邮件系统.../etc/logrotate.conf为其默认配置文件指定每个日志文件的默认...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,407
精华内容 962
关键字:

切割日志文件