logrotate日志管理工具与split文件切割命令
概述
logrotate是一个Linux系统默认安装了的日志文件管理工具,用来把旧文件轮转、压缩、删除,并且创建新的日志文件。我们可以根据日志文件的大小、天数等来转储,便于对日志文件管理。
logrotate是基于crond服务来运行的,其crond服务的脚本是/etc/cron.daily/logrotate,日志转储是系统自动完成的。实际运行时,logrotate会调用配置文件 /etc/logrotate.conf,可以在 /etc/logrotate.d 目录里放置自定义好的配置文件,用来覆盖logrotate的缺省值。
配置文件详解
/etc/logrotate.conf 是主配置文件
/etc/logrotate.d 是一个目录,该目录下的所有文件都会被主动的读到 /etc/logrotate.conf 中执行
| 配置项 | 说明 |
| compress | 通过 gzip 压缩转储旧的日志 |
| nocompress | 不需要压缩时,用这个参数 |
| copytruncate | 用于还在打开中的日志文件,把当前日志备份并截断,是先拷贝再清空的方式,拷贝和清空之间有一个时间差,可能会丢失部分日志数据 |
| nocopytruncate | 备份日志文件但是不截断 |
| create mode owner group | 使用指定的文件模式创建新的日志文件,如:create 0664 root utmp |
| nocreate | 不建立新的日志文件 |
| delaycompress | 和 compress 一起使用时,转储的日志文件到下一次转储时才压缩 |
| nodelaycompress | 覆盖 delaycompress 选项,转储同时压缩 |
| missingok | 在日志转储期间,任何错误将被忽略 |
| errors address | 转储时的错误信息发送到指定的 Email 地址 |
| ifempty | 即使日志文件是空文件也转储,这个是 logrotate 的缺省选项 |
| notifempty | 如果日志文件是空文件的话,不转储 |
| mail E-mail | 把转储的日志文件发送到指定的 E-mail 地址 |
| nomail | 转储时不发送日志文件到 E-mail 地址 |
| olddir directory | 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统 |
| noolddir | 转储后的日志文件和当前日志文件放在同一个目录下 |
| prerotate/endscript | 在转储之前需要执行的命令可以放入这个对中,这两个关键字必须单独成行 |
| postrotate/endscript | 在转储之后需要执行的命令可以放入这个对中,这两个关键字必须单独成行 |
| sharedscripts | 所有的日志文件都转储完毕后统一执行一次脚本 |
| daily | 指定转储周期为每天 |
| weekly | 指定转储周期为每周 |
| monthly | 指定转储周期为每月 |
| rotate count | 指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5个备份 |
| size(minsize) logsize | 当日志文件到达指定的大小时才转储,size 可以指定单位为k或M,如:size 500k,size 100M |
| dateext | 指定转储后的日志文件以当前日期为格式结尾, |
| dateformat dateformat | 配合dateext使用,紧跟在下一行出现,定义日期格式,只支持%Y %m %d %s这4个参数,如:dateformat -%Y%m%d%s |
软件信息说明、
[root@master log]# rpm -ql logrotate
/etc/cron.daily/logrotate
/etc/logrotate.conf # 主配置文件
/etc/logrotate.d # 配置目录
测试logrotate如何管理日志
这里我们将创建一个10MB的日志文件/var/log/log-file。我们将展示怎样使用logrotate来管理该日志文件。
我们从创建一个日志文件开始吧,然后在其中填入一个10MB的随机比特流数据文件。
[root@master log]# touch log-file
[root@master log]# head -c 10M < /dev/urandom > /var/log/log-file
现在日志文件已经准备好,我们将配置logrotate来轮循该日志文件。让我们为该文件创建一个配置文件。
[root@master logrotate.d]# cat log-file
/var/log/log-file {
monthly 指定转储周期为每月
rotate 5 指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5个备份
compress 通过 gzip 压缩转储旧的日志
delaycompress 和 compress 一起使用时,转储的日志文件到下一次转储时才压缩
missingok 在日志转储期间,任何错误将被忽略
notifempty 如果日志文件是空文件的话,不转储
dateext 指定转储后的日志文件以当前日期为格式结尾,
create root root 使用指定的文件模式创建新的日志文件
postrotate
/usr/bin/killall -HUP rsyslogd 在转储之后需要执行的命令可以放入这个对中,这两个关键字必须单独成行
endscript
}
[root@master log]# logrotate -vf /etc/logrotate.d/log-file
[root@master log]# ls -lh log-file*
-rw-r--r-- root root 11月 : log-file
-rw-r--r-- root root 10M 11月 : log-file-
即使轮循条件没有满足,我们也可以通过使用‘-f’选项来强制logrotate轮循日志文件,‘-v’参数提供了详细的输出。
Logrotate的记录日志
logrotate自身的日志通常存放于/var/lib/logrotate/status目录。如果处于排障目的,我们想要logrotate记录到任何指定的文件,我们可以指定像下面这样从命令行指定。
[root@master log]# head -c 10M < /dev/urandom > /var/log/log-file
[root@master log]# logrotate -vf -s /var/log/logrotate-status /etc/logrotate.d/log-file
reading config file /etc/logrotate.d/log-file
Allocating hash table for state file, size B Handling logs rotating pattern: /var/log/log-file forced from command line ( rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/log-file
log needs rotating
rotating log /var/log/log-file, log->rotateCount is
dateext suffix '-20191129'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
glob finding logs to compress failed
glob finding old rotated logs failed
renaming /var/log/log-file to /var/log/log-file-
creating new /var/log/log-file mode = uid = gid =
running postrotate script
Logrotate定时任务
logrotate需要的cron任务应该在安装时就自动创建了,我把cron文件的内容贴出来,以供大家参考。
[root@master log]# cat /etc/cron.daily/logrotate
#!/bin/sh /usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit
logrotate生产应用
防止访问日志文件过大
[root@master ~]# cat /etc/logrotate.d/nginx
/var/log/nginx/*.log {
su root root
daily
rotate 5
missingok
notifempty
dateext
olddir /root
create 644 root root
postrotate
if [ -f /var/run/nginx/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx/nginx.pid`
fi
endscript
}
logrotate工具对于防止因庞大的日志文件而耗尽存储空间是十分有用的。配置完毕后,进程是全自动的,可以长时间在不需要人为干预下运行。本教程重点关注几个使用logrotate的几个基本样例,你也可以定制它以满足你的需求。
split命令可用选项
| 短选项 | 长选项 | 选项描述 |
| -b | –bytes=SIZE | SIZE 值为每一输出档案的大小,单位为 byte。 |
| -C | –line-bytes=SIZE | 每一输出档中,单行的最大 byte 数。 |
| -d | –numeric-suffixes | 使用数字作为后缀。 |
| -l | –lines=NUMBER | NUMBER 值为每一输出档的列数大小。 |
实例1、以每个文件1000行分割
split命令分割文件成每个文件1000行,并且文件名依次为 [前缀]aa, [前缀]ab, [前缀]ac等,默认的前缀是X,每个文件的行数为1000行,命令如下:
[root@master nginx]# split access.log
[root@master nginx]# wc -l *
2653154 access.log
2653154 access.log.bak
0 error.log
477 error.log.bak
1000 xaa
1000 xab
1000 xac
实例2、以每个文件20MB分割
分割文件为多个20MB的文件,附带-b选项命令如下:
[root@master nginx]# split -b 20M access.log
[root@master nginx]# ls -lh
总用量 542M
-rwxr-xr-x root root 271M 11月 : access.log
-rw-r--r-- root root 20M 11月 : xaa
-rw-r--r-- root root 20M 11月 : xab
-rw-r--r-- root root 20M 11月 : xac
-rw-r--r-- root root 20M 11月 : xad
-rw-r--r-- root root 20M 11月 : xae
-rw-r--r-- root root 20M 11月 : xaf
-rw-r--r-- root root 20M 11月 : xag
-rw-r--r-- root root 20M 11月 : xah
-rw-r--r-- root root 20M 11月 : xai
-rw-r--r-- root root 20M 11月 : xaj
-rw-r--r-- root root 20M 11月 : xak
-rw-r--r-- root root 20M 11月 : xal
-rw-r--r-- root root 20M 11月 : xam
-rw-r--r-- root root 11M 11月 : xan
实例3、以每个文件50MB指定前缀分割
使用–bytes选项把文件分割成多个50MB的文件,–bytes类似-b选项,在第二个参数指定前缀。
[root@master nginx]# split --bytes=50M access.log nginx_
[root@master nginx]# ls -lh
总用量 542M
-rwxr-xr-x root root 271M 11月 : access.log
-rw-r--r-- root root 50M 11月 : nginx_aa
-rw-r--r-- root root 50M 11月 : nginx_ab
-rw-r--r-- root root 50M 11月 : nginx_ac
-rw-r--r-- root root 50M 11月 : nginx_ad
-rw-r--r-- root root 50M 11月 : nginx_ae
-rw-r--r-- root root 21M 11月 : nginx_af
实例4、基于行数分割文件
使用-l选项指定行数来把文件分割成多个行数相同的文件。
[root@master nginx]# wc -l access.log
access.log
[root@master nginx]# split -l access.log nginx_
[root@master nginx]# wc -l *
access.log
nginx_aa
nginx_ab
nginx_ac
nginx_ad
nginx_ae
nginx_af
实例5、以数字后缀命名分割文件
使用-d选项可以指定后缀为数字,如00,01,02..,而不是aa,ab,ac。
[root@master nginx]# split -d -b 50M access.log
[root@master nginx]# ls -lh
总用量 542M
-rwxr-xr-x root root 271M 11月 : access.log
-rw-r--r-- root root 50M 11月 : x00
-rw-r--r-- root root 50M 11月 : x01
-rw-r--r-- root root 50M 11月 : x02
-rw-r--r-- root root 50M 11月 : x03
-rw-r--r-- root root 50M 11月 : x04
-rw-r--r-- root root 21M 11月 : x05
logrotate日志管理工具与split文件切割命令的更多相关文章
- logrotate日志管理工具
一.概述 logrotate是一个Linux系统默认安装了的日志文件管理工具,用来把旧文件轮转.压缩.删除,并且创建新的日志文件.我们可以根据日志文件的大小.天数等来转储,便于对日志文件管理. log ...
- 【运维工具】logrotate 日志管理神器
服务器经常会产生各种各样的日志文件,我们需要定期清理 日志的分类 系统日志 应用日志 系统日志 例如系统的history 历史信息 crontab的运行日志 一般系统日志系统都帮我们运维好了,不 ...
- 日志管理工具之logrotate
Logrotate配置和测试 logrotate软件是一个日志管理工具,用于非分隔日志,删除旧的日志文件,并创建新的日志文件,起到“转储作用”,可以为系统节省磁盘空间.logrotate是基于cron ...
- 系统自带的日志管理工具-rsyslogd
系统自带的日志管理工具-rsyslogd 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.日志管理简介 1.什么是日志 系统日志是记录系统中硬件.软件和系统问题的信息,同时还可以 ...
- Java程序员须知的七个日志管理工具(转)
Splunk vs. Sumo Logic vs. LogStash vs. GrayLog vs. Loggly vs. PaperTrails vs. Splunk>Storm 英文原文:T ...
- LogCook 一个简单实用的Android日志管理工具
众所周知,日志的管理是软件系统很重要的一部分,千万不可忽略其重要性.完整的日志将会在系统维护中起着异常重要的作用,就好像磨刀不误砍柴工一样,日志就像对系统进行分析的工具,工具便捷了,对系统分析起来就能 ...
- mysql 开发进阶篇系列 33 工具篇(mysqlbinlog日志管理工具)
一.概述 由于服务器生成的二进制日志文件以二进制格式保存,所以如果要想检查这些文件的文本格式,就会用到mysqlbinlog日志管理工具. mysqlbinlog的语法如下: mysqlbinlog ...
- Java程序员须知的七个日志管理工具
本文由 ImportNew - 赖 信涛 翻译自 takipiblog.欢迎加入翻译小组.转载请见文末要求. Splunk vs. Sumo Logic vs. LogStash vs. GrayLo ...
- CentOS7日志管理工具 journalctl
1.简介 日志管理工具journalctl是centos7上专有的日志管理工具,该工具是从message这个文件里读取信息. Systemd统一管理所有Unit的启动日志.带来的好处就是,可以只用jo ...
随机推荐
- [C1] Andrew Ng - AI For Everyone
About this Course AI is not only for engineers. If you want your organization to become better at us ...
- SQL Server 删除数据库
1. 图形化界面删除 在所需要删除的数据库上右击,然后删除.注意如果这个数据库有应用或者用户连接,请勾选[关闭现有连接],否则无法删除. 2. DROP DATABASE删除数据库 drop data ...
- vue-cli2.0和vue-cli3.0中当发布到生产环境时禁用console.log
vue-cli2.0中的方法 1.安装插件 npm install uglifyjs-webpack-plugin --save-dev 2.修改webpack.prod.conf.js配置文件 co ...
- Windows开机自动登录账户
如何在Windows设了账户密码的情况下开机自动登录账户,有以下两种方法. 通过Windows设置自动登录 按“Win+R”组合键打开“运行”框内输入“netplwiz”. 打开以下窗口,将“要使用本 ...
- Paper | MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
目录 1. 故事 2. MobileNet 2.1 深度可分离卷积 2.2 网络结构 2.3 引入两个超参数 3. 实验 本文提出了一种轻量级结构MobileNets.其基础是深度可分离卷积操作. M ...
- .NET Core 中间件之压缩、缓存
前言 今天给大家介绍一下在 ASP.NET Core 日常开发中用的比较多的两个中间件,它们都是出自于微软的 ASP.NET 团队,他们分别是Microsoft.AspNetCore.Response ...
- Jenkins安装第一个插件和通过离线安装包进行安装
1.打开左侧Manage Jenkins 选择Manage Plugins菜单 2.搜索Folders插件,该插件用于创建一个目录 3.点击安装进入插件安装状态,Jenkins会自动下载相关联的插件 ...
- AngleSharp 实战(05)之遍历内部子元素(x)元素,尝试着获取元素的 Attr 和 InnerText
直接贴代码了: using System; using System.Linq; using System.Threading.Tasks; using AngleSharp; using Angle ...
- 同时读取两个文件进行while循环
知识点:文件对象提供了三个“读”方法: .read()..readline() 和 .readlines().每种方法可以接受一个变量以限制每次读取的数据量,但它们通常不使用变量. 问题描述: 我们的 ...
- px与em的区别
PX特点:px像素(Pixel).相对长度单位.像素px是相对于显示器屏幕分辨率而言的.EM特点 1. em的值并不是固定的:2. em会继承父级元素的字体大小.