linux日志轮转功能

来源:互联网 发布:数据结构与算法笔试 编辑:程序博客网 时间:2024/05/22 17:57

日志的轮转是一种日志管理策略,可以简化管理。

以/var/log/messages日志文件为例:

先分四步讲解下轮转的过程。

1.系统只有messages文件,还没有轮转

touch messages

2.第一次轮转生成messages.1

mv messages messages.1

touch messages

3.第二次轮转生成messages.2

mv messages.1 messages.2

mv messages messages.1

touch messages

4.第三次轮转生成messages.3

mv messages.2 messages.3

mv messages.1 messages.2

mv messages messages.1

toouch messages

这样日志达到一定条件就会这样不断生成新的文件,可以看出,日志的轮转其本质就是旧文件的移动和新文件的创建。

----------------------------------------------------------------------

日志的轮转其主配置文件为/etc/logrotate.conf

[root@localhost ~]# cat /etc/logrotate.conf|grep -v ^# |grep -v ^$

weekly

rotate 4

create

include /etc/logrotate.d

/var/log/wtmp {

    monthly

    minsize 1M

    create 0664 root utmp

    rotate 1

}

全局配置:
 weekly :表示所有日志每周进行一次轮转
 rotate 4 :表示所有日志默认只保留一个旧文件
 create :由于旧文件被轮转了,所以新建一个日志文件来存储日志
 include /etc/logrotate.d :次配置文件所在目录
 
/var/log/wtmp为局部配置:

 monthly :表示所有日志每周进行一次轮转

 minsize 1M :轮转日志的最小大小

 create 0664 root utmp :创建文件时,指定权限、属主和属组

 rotate 1 :保留一个旧文件

这全局配置和局部配置就类似C++中类的继承。

----------------------------------------------------------------------

自定义日志轮转:

自定义日志轮转前要了解下面几个命令:

需要执行的外部命令放在sharedscripts和endscript两行之间

 prerotate : logrotate命令运行前执行脚本内容

 postrotate:logrotate命令运行后执行脚本内容

----------------------------------------------------------------------

下面说个实例:

配置/var/log/mytest.log日志文件记录所有日志,并加上高级权限a;

 echo "*.info/var/log/mytest.log">>/etc/syslog.conf

 /etc/init.d/syslog restart

 chattr +a /var/log/mytest.log

轮转配置

vim /etc/logrotate.d/mytest

 /var/log/mytest.log{

   mothly

   size=10M

   rotate 5

   compress压缩保存

 sharedscripts

   prerotate

   /usr/bin/chattr -a /var/log/mytest.log

 endscripts

 sharedscripts

   postrotate

     /usr/bin/kill -HUP syslog  以HUP方式从新加载服务,相当于从新读取配置文件,不改变进程id号

     /usr/bin/chattr +a /var/log/mytest.log

 endscripts

 }

最后可以用下这个命令:

[root@localhost logrotate.d]# logrotate -v /etc/logrotate.conf   测试有没有日志需要轮转-f 强制轮转