linux中logrotate对日志进行切割压缩(nginx,mysql)

logrotate简介
日志轮转特别适用于具有固定文件名的日志文件,比如MySQL的出错日志、常规查询日志、慢查询日志等。Linux系统有一个非常好用的根据logratate可以实现自动轮转,本文介绍它的原理和用法。

logrotate是管理日志文件的工具,在CentOS系统中,命令的位置在/usr/sbin/logrotate,常用的操作如:
  -d, --debug               Don't do anything, just test (implies -v)
  -f, --force               Force file rotation
注意:带有-d参数,并不会产生新日志.

logrotate一般每天由cron运行一次.标准的配置文件是/etc/logrotate.conf,而/etc/logrotate.d目录也是保存配置文件的位置.

logrotate常见选项:
/-----------------------------------------------
选项        |        含义
-----------------------------------------------
compress    |    压缩日志文件的所有非当前版本
copy    |    复制当前的日志文件,忽略create参数
copytruncate    |    复制当前的日志文件,并置空当前文件
daily    |    每天轮日志文件i
dateext    |    轮换的日志后缀为-YYYYMMDD格式
delaycompress    |    压缩除了当前和最近之外的所有其他版本
missingok    |    如果日志不存在,不会报错
notifempty    |    如果日志为空,则不轮换
rotate n    |    在轮换方案中包含n个版本的日志
size=logsize    |    如果日志文件大于logsize才轮换
-----------------------------------------------/

  默认情况下,logrotate部署为每天运行的cronjob,你可以在目录/etc/cron.daily里找到名为logrotate的配置文件。那么它是在每天的上面时候运行的呢?打开文件/etc/crontab就知道了,下面是我机器上的情况:

 代码如下 复制代码

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
     
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

从上面的配置我们可以知道,/etc/cron.daily是在每天凌晨4:02执行。也就是说,每天4:02分/etc/cron.daily/logrotate将会自动执行,下面是它的内容:

 代码如下 复制代码

#!/bin/sh
     
/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0

  从上面我们可以知道,logratate默认的配置文件是/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

# 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 {
    monthly
    create 0664 root utmp
        minsize 1M
    rotate 1
}

/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}

# system-specific logs may be also be configured here.

从/etc/logrotate.conf配置可以知道,这个默认的配置文件将读取目录/etc/logrotate.d,所以我们只要把自己写的配置文件放到/etc/logrotate.d目录下即可。

mysql 配置篇

MySQL本省提供了一个rotate的参考配置文件,在mysql安装目录下的support-files目录里,文件名为mysql-log-rotate,内容如下:

 代码如下 复制代码

# This logname can be set in /etc/my.cnf
# by setting the variable "err-log"
# in the [safe_mysqld] section as follows:
#
# [safe_mysqld]
# err-log=/usr/local/mysql/data/mysqld.log
#
# If the root user has a password you have to create a
# /root/.my.cnf configuration file with the following
# content:
#
# [mysqladmin]
# password = <secret>
# user= root
#
# where "<secret>" is the password.
#
# ATTENTION: This /root/.my.cnf should be readable ONLY
# for root !

/usr/local/mysql/data/mysqld.log {
        # create 600 mysql mysql
        notifempty
        daily
        rotate 3
        missingok
        compress
    postrotate
        # just if mysqld is really running
        if test -x /usr/local/mysql/bin/mysqladmin &&
           /usr/local/mysql/bin/mysqladmin ping &>/dev/null
        then
           /usr/local/mysql/bin/mysqladmin flush-logs
        fi
    endscript
}

从上面的注释信息可以看到步骤:
1.创建MySQL root密码文件
  vi /root/.my.cnf
  编辑如下内容
 
 

 代码如下 复制代码
[mysqladmin]
  password = <secret>
  user= root

  注: <secret>是你的root 密码
2.给root 读的权限
  chmod 600 /root/.my.cnf
3.把mysql-log-rotate拷贝至/etc/logrotate.d目录下,修改其内容为:

 代码如下 复制代码
/usr/local/mysql/data/*.log {
        create 600 mysql mysql
        notifempty
        daily
        rotate 7
        missingok
        compress
        postrotate
        # http://www.111cn.net        # just if mysqld is really running
        if test -x /usr/local/mysql/bin/mysqladmin &&
           /usr/local/mysql/bin/mysqladmin ping &>/dev/null
        then
           /usr/local/mysql/bin/mysqladmin flush-logs
        fi
    endscript
}

4.执行以下命令测试

 代码如下 复制代码

/usr/sbin/logrotate -f /etc/logrotate.d/mysql-log-rotate

nginx 配置篇
将下面代码 写入 /etc/logrotate.d/nginx

 代码如下 复制代码
/usr/local/nginx/log/*.log {
        create 600 www www
        notifempty
        daily
        rotate 7
        missingok
        compress
    postrotate
        #servic nginx reload
    endscript
}
时间: 2024-09-23 12:41:32

linux中logrotate对日志进行切割压缩(nginx,mysql)的相关文章

linux中.htaccess设置缓存与Gzip压缩配置

在使用Linux主机中,一般使用的环境都是Apache+PHP+Mysql 来使用,其实跟你使用PHP.Mysql没有什么关系. 关键在于Apache的设置,一般来说只要 httpd.conf 设置好了  .htaccess 就能正常使用了.关于怎么设置可以百度一下~这不是本文的重点. 如何使用 .htaccess 设置浏览器缓存 一般来讲我们网站的图片文件(jpg,png,gif等).样式文件(css).脚本文件(js) 这些是不会经常更改的,那么我们也没有必要让用户打开浏览器每次都重新读取这

linux中WDCP的日志彻底删除技巧

apache或nginx都有开关默认日志,一个是正常访问日志,一个是错误的日志, 目录在  /www/wdlinux/nginx-1.0.15/logs  /www/wdlinux/httpd-2.2.22/logs 这两个日志,会记录所有的正常与不正常的访问日志信息. 而且是所有服务器上的域名,除非,在站点管理城,启用了日志记录,才会将相应的站点域名日志记录到另一个独立的文件中. 否则,都会记录在这几个文件里 所以,是默认的web服务器日志文件. 不过,一般来说,这个日志不是必须的,除非有其它

linux中Sentry事件日志实战

不管你用什么编程语言,都会面临如何处理错误日志的问题.很多程序员对错误日志放任自流,直到出现故障了才追悔莫及,如果问我怎么办,我会推荐 Sentry! Sentry 是一个错误记录和聚合的平台,只要看看它漂亮的界面就会喜欢上它: sentry sentry 关于如何安装 Sentry,官方文档里已经给出了详细的说明,建议大家仔细阅读,一般通过 Virtualenv 来安装 Sentry,具体可以参考:学习搭建Python环境. 提醒:我在安装 7.5 的时候,测试有循环重定向,如果你也是可以安装

linux中通过phpize添加PHP扩展openssl、mysql

phpize phpize 命令是用来准备 PHP 扩展库的编译环境的.下面例子中,扩展库的源程序位于 extname 目录中: $ cd extname $ phpize $ ./configure $ make # make install 成功的安装将创建 extname.so 并放置于 PHP 的扩展库目录中.需要调整 php.ini,加入 extension=extname.so 这一行之后才能使用此扩展库. 如果系统中没有 phpize 命令并且使用了预编译的包(例如 RPM),那要

Linux中利用openssl生成SSL证书给nginx使用

这里说下Linux 系统怎么通过openssl命令生成 证书.   首先执行如下命令生成一个4096位的key  代码如下 复制代码 openssl genrsa -des3 -out hupohost.key 4096 然后他会要求你输入这个key文件的密码.不推荐输入.因为以后要给nginx使用.每次reload nginx配置时候都要你验证这个PAM密码的.   由于生成时候必须输入密码.你可以输入后 再删掉  代码如下 复制代码 mv ssl.key xxx.key openssl rs

Linux中使用logrotate对MySQL日志进行轮转

日志轮转特别适用于具有固定文件名的日志文件,比如MySQL的出错日志.常规查询日志.慢查询日志 等.Linux系统有一个非常好用的根据logratate可以实现自动轮转,本文介绍它的原理和用法. 默认情况下,logrotate部署为每天运行的cron job,你可以在目录/etc/cron.daily里找到名为 logrotate的配置文件.那么它是在每天的上面时候运行的呢?打开文件/etc/crontab就知道了,下面是 我机器上的情况: SHELL=/bin/bash PATH=/sbin:

linux中日志的自动切割和删除

例子一 /script/cut_log.phps会自动切割Nginx的Web访问日志.默认会保存7天的日志,根据硬盘空间情况调整,尽可能的保存多一些的日志.这个日志很重要,比如网站运行异常,或者网站被黑,日志都是很重要的检测途径. /script/del_log.sh会每天自动删除其他非重要日志. cron计划任务规则在下面这个文件中: /etc/cron.d/yundaiwei 内容如下: ##### delete web logs 0 0 * * * root /script/cut_log

实现nginx+php用logrotate来对日志进行切割

前面的文章有salt的安装过程及salt模块,不清楚的可以去看一下,这篇主要是实现nginx+php 用logrotate来对日志进行切割,然后再简单的使用下salt这个工具: 架构如下: 以下.pp文件均在/etc/puppet/modules/logrotate/manifests下面,内容如下 init.pp class logrotate ( $backup_nginx = "/data/backup/log/nginx", $nginx_log = "/data/l

Linux中文件的压缩与解压缩命令操作示例集锦

  所谓压缩就是将原有的文件通过不同的编码技术进行运算,以减少数据存储所需要的空间,使用前再利用解压缩还原源文件的内容即可. 和windows一样,在linux下也存在多种压缩与解压缩方法. 1.zip压缩与解压缩 zip是最为广泛使用的压缩程序,经它压缩的文件会产生扩展名为zip的压缩文件,而且这种格式在多种系统上可以使用,像windows中的winzip 下面看一下在linux中如何建立zip文件. 我们在终端中输入zip会出现这个命令的一些介绍和参数的意义. 代码如下: xiaopeng@