何为Logrotate?

Logrotate是一个实用的日志管理工具,旨在简化对系统上生成大量的日志文件进行管理。 Logrotate允许自动旋转压缩,删除和邮寄日志文件,从而节省宝贵的磁盘空间。 Logrotate可以设置为每天、每周、每月或当日志文件达到一定的大小时处理日志文件。还可以完全控制日志的自动化管理方式,而不需要人工干预。Logrotate支持Linux系统上的所有日志文件,包括但不限于ApacheNginxTomcatELKzabbix等应用。

1.安装logrotate

系统默认已经安装,某些Linux发行版可能并未安装,那么请执行以下命令安装:

Centos:

$ yum install logrotate -y

Ubuntu:

$ apt-get install logrotate -y

通过yum默认安装的文件存储位置说明

/etc/cron.daily            # logrotate脚本文件存放位置
/etc/logrotate.conf # 主配置文件
/usr/sbin/logrotate # 二进制程序文件
/etc/logrotate.d/ # 特定服务日志存储目录(自己设定的配置文件)
/var/lib/logrotate.status # 状态文件

2.查看logrotate主文件默认配置情况

$ cat /etc/logrotate.conf

# see "man logrotate" for details
# rotate log files weekly
weekly # 每周转存一次 # keep 4 weeks worth of backlogs
rotate 4 # 保留四个日志备份文件 # create new (empty) log files after rotating old ones
create # rotate后,创建一个新的空文件 # use date as a suffix of the rotated file
dateext # 轮转的文件名字带有日期信息 # uncomment this if you want your log files compressed
#compress # RPM packages drop log rotation information into this directory
include /etc/logrotate.d # 此目录下的配置文件优先生效 # no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp { # 指定/var/log/wtmp日志文件;
monthly # 每月轮转一次,优先于全局设定的每周轮转一次;
minsize 1M # 日志文件大于1M才会去轮转;
create 0664 root utmp # 新日志文件的权限,属主,属组;
rotate 1 # 保留一个日志备份,优先于全局设置的四个;
}
/var/log/btmp { # 指定/var/log/btmp日志文件;
missingok # 如果日志丢失,不报错;
monthly
create 0600 root utmp
rotate 1
} # system-specific logs may be also be configured here.
# 系统特定的日志也可以在主文件中配置。

3.logrotate日志切割

在定义日志文件时可以使用通配符,但不建议使用,因为它会包括已切换过的日志,如必须使用,请在*号后加上已知的文件扩展名, 例如:*.log

Nginx日志:

/etc/logrotate.d/目录下创建Nginx服务日志配置文件

$ vim /etc/logrotate.d/nginx

/usr/local/nginx/logs/*.log {
create 644 www root
daily
dateext
rotate 3
minsize 10K
copytruncate
nocompress
missingok
notifempty
noolddir
postrotate
/bin/kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
endscript
}

php日志:

/usr/local/php/var/log/*.log {
missingok
notifempty
sharedscripts
delaycompress
create 0664 www www
postrotate
/bin/kill -SIGUSR1 `cat /usr/local/php/var/run/php-fpm.pid 2>/dev/null` 2>/dev/null || true
endscript
}

注:你也可以手动生成一个20M内容的日志文件进行测试,例如:

$ head -c 20M < /dev/urandom > /var/log/renwole-log

配置完成后,可以通过如下命令来手动执行查看效果:

$ logrotate -f /etc/logrotate.d/nginx

另外还可以使用如下命令查看logrotate运行状态:

$ cat /var/lib/logrotate/logrotate.status

由于Logrotate是基于cron定时运行的,所以logrotate脚本默认在 /etc/cron.daily/ 目录下,文件名是logrotate。你可以设置 /etc/anacrontab 来控制Logrotate何时运行。

4.查看anacrontab默认配置

$ cat /etc/anacrontab

# /etc/anacrontab: configuration file for anacron

# See anacron(8) and anacrontab(5) for details.

SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22 #period in days delay in minutes job-identifier command
1 5 cron.daily nice run-parts /etc/cron.daily
7 25 cron.weekly nice run-parts /etc/cron.weekly
@monthly 45 cron.monthly nice run-parts /etc/cron.monthly

5.关于logrotate常用配置参数注解

daily,weekly,monthly  # 转储周期分别是每天/每周/每月;
minsize 15M # 日志体积大于此值时轮换(例如:100K,4M);
dateext # 轮询的文件名字带有日期信息;
missingok # 如果日志文件丢失,不要显示错误;
rotate 5 # 轮转存储中包含多少备份日志文件,0为无备份,以数字为准;
compress # 通过gzip压缩转储以后的日志,以*.gz结尾;
nocompress # 不需要压缩时,用这个参数;
delaycompress # 延迟压缩,和compress一起使用时压缩所有日志,除当前和下一个最近的;
nodelaycompress # 覆盖delaycompress选项,转储同时压缩;
copytruncate # 用于还在打开中的日志文件,把当前日志备份并截断;
nocopytruncate # 备份日志文件但是不截断;
create 644 www root # 转储文件,使用指定的文件模式创建新的日志文件;
nocreate # 不建立新的日志文件;
errors renwole@my.org # 专储时的错误信息发送到指定的Email地址;
ifempty # 即使是空文件也转储,这个是logrotate的缺省选项;
notifempty # 如果日志文件为空,则不转储;
mail renwole@my.org # 把转储的日志文件发送到指定的E-mail地;
nomail # 转储时不发送日志文件;
olddir /tmp # 转储后的日志文件放入指定目录,必须和当前日志文件在同一个文件系统;
noolddir # 转储后的日志文件和当前日志文件放在同一个目录下;
prerotate/endscript # 在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行;
postrotate/endscript # 在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行;
tabooext # 不转储指定扩展名的文件,缺省扩展名:cfsaved,.disabled,.dpkg-dist等;
sharedscripts # 共享脚本,让postrotate/endscript包含脚本只执行一次即可;
dateformat # 配合dateext使用可以为切割后的日志加上YYYYMMDD格式的日期;

以上参数都可以在全局主配置文件中定义,或指定为某个日志文件进行配置,注意:使用时参数之间不要冲突。

python uwsgi 日志分割

[root@test-server28 logrotate.d]# cat uwsgi
/data/logs/uwsgi/*/access.log {
# 每天分割
daily
# 保存30天
rotate 30
# 日期后缀
dateext
# 日志丢失不报错
missingok
# 空文件不转储
notifempty
# 压缩
#compress
# 共享脚本
sharedscripts
postrotate
touch /data/logs/uwsgi/touchforlogrotate
endscript
}

切割日志时出现报错

error: skipping "/home/deploy/tomcat/apache-tomcat-7.0.75-df/logs/catalina.out" 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.

  

xx 文件所属用户

添加“su deploy deploy ”到/etc/logrotate.d/tomcat文件中即可
如下; /home/deploy/tomcat*********/logs/*.out {
su deploy deploy
copytruncate
daily
rotate 30
dateext
missingok
notifempty
}

  

[root@**** logrotate.d]#  logrotate -f /etc/logrotate.d/tomcat

[root@**** logs]# ls
catalina.out catalina.out-20181210

  

对分割日志进行定时的删除 

#!/bin/bash

/bin/find /mnt/log/tomcat/ -name "*.out*" -mtime +15 -type f|xargs rm -rf

/bin/find /home/deploy/*******/logs/  -name "*.out*" -mtime +1 -type f -print0 |xargs -0 mv -t /mnt/log/tomcat/

  

如何在Centos 7上用Logrotate管理日志文件的更多相关文章

  1. linux之使用cron,logrotate管理日志文件

    1) logrotate配置   logrotate 程序是一个日志文件管理工具.用来把旧的日志文件删除,并创建新的日志文件,我们把它叫做“转储”.   我们可以根据日志文件的大小,也可以根据其天数来 ...

  2. logrotate: 管理日志文件

    Erik Troan提供了一种优秀的工具logrotate,它实现了多种多样的日志管理策略,而且在我们举例的所有发行版本上都是标准应用. logrotate的配置文件由一系列规范组成,它们说明了要管理 ...

  3. 如何在 CentOS 7 上生成 SSL 证书为 Nginx 加密

    本文首发:开发指南:如何在 CentOS 7 上安装 Nginx Let’s Encrypt 是由 Internet Security Research Group (ISRG) 开发的一个自由.自动 ...

  4. 如何在 CentOS 7 上安装 Nginx

    本文首发:开发指南:如何在 CentOS 7 上安装 Nginx Nginx 读作 engine x, 是一个免费的.开源的.高性能的 HTTP 和反向代理服务,主要负责负载一些访问量比较大的站点. ...

  5. 如何在CentOS 7上修改主机名

    如何在CentOS 7上修改主机名 在CentOS中,有三种定义的主机名:静态的(static),瞬态的(transient),和灵活的(pretty).“静态”主机名也称为内核主机名,是系统在启动时 ...

  6. 如何在CentOS 7上部署Google BBR【搬运、机翻】

    如何在CentOS 7上部署Google BBR 本文章搬运自 https://www.vultr.com/docs/how-to-deploy-google-bbr-on-centos-7 [注:文 ...

  7. 如何在CentOS 7上安装newman

    前提:先安装nodejs,详见:如何在CentOS 7上安装Node.js和npm #sudo npm install -g newman 结果: /usr/local/bin/newman -> ...

  8. 如何在 CentOS 7 上安装 Docker

    Docker 是一个开源工具,它可以让创建和管理 Linux 容器变得简单.容器就像是轻量级的虚拟机,并且可以以毫秒级的速度来启动或停止.Docker 帮助系统管理员和程序员在容器中开发应用程序,并且 ...

  9. 如何在CentOS 7上使用vsftpd设置ftp服务器

    一.前言介绍 FTP(文件传输协议)是一种标准的客户机-服务器网络协议,允许用户在远程网络之间传输文件. 有几个开源的FTP服务器可用于Linux.最受欢迎和广泛使用的是pureftpd.proftp ...

随机推荐

  1. 十二个 ASP.NET Core 例子——配置操作

    目录: 简单配置(利用configration 键值读取) 使用选项和配置对象(自定义类绑定配置文件实现读取) IOptionsSnapshot(配置文件更改时也变化) 内存数据放到配置对象中 实体框 ...

  2. jQuery:下拉列表的联动

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"% ...

  3. php页面zend加密乱码的解决办法

    http://www.chinaz.com/program/2008/1021/41485.shtml?qq-pf-to=pcqq.group 今天在服务器部署一个php程序是有zend加密的页面出现 ...

  4. ThinkPHP配置文件的加载

    分类: thinkphp(39) 版权声明:本文为博主原创文章,未经博主允许不得转载. 惯例配置->应用配置->模式配置->调试配置->状态配置->模块配置->扩展 ...

  5. C#编写街道管理系统

    项目需求: 一.语言和环境 A.实现语言 C# B.环境要求 Visual Studio 2012 二.功能要求 现使用.NET WinForms技术为居委会开发一个街道管理软件,其中街道管理窗体界面 ...

  6. windows下安装redis3.2.100单机和集群详解

    下载redis 下载地址:https://github.com/MicrosoftArchive/redis/releases 我下载的是3.2.100版本的Redis-x64-3.2.100.zip ...

  7. 一句话 Servlet

    Servlet是用来完成B/S架构下,客户端请求的响应处理. web.xml其实就是servlet的一个配置文件,通过他来寻找对应的servlet

  8. Web前端学习(1):上网的过程与网页的本质

    "众里寻他千百度"--但是在信息化时代,我们只需要动动手指百度一下,google一下,便可以在网络上寻得我们想要查找的信息.我们或许都知道要如何在网上获得自己所需信息,但是上网的过 ...

  9. Django_生产环境静态文件配置

    需求: 当Django项目运行在线上的时候,需要关闭debug模式,那么Django设置中,静态文件路径配置将会失效,如何解决这个问题? 问题原因: Django默认关闭debug模式,Django错 ...

  10. javaweb后台转码

    为什么需要转码? 客户端向服务器发送请求的四种情况:1.URL方式直接访问;2.页面链接(属于get请求);3.表单get提交;4.表单post提交 1.url(url和页面链接):各大浏览器.各个操 ...