Linux系统Logrotate服务介绍
对于日常管理linux来说,日志文件显得非常的重要,它可以看出问题出现的点与相关错误信息,同样还可以根据信息来分析问题所出现的原因所在,是管理系统与服务必不可少的工具之一。
logrotate是个十分有用的工具,它可以自动对日志进行截断(或轮循)、压缩以及删除旧的日志文件。例如,你可以设置logrotate,让/var/log/XXX日志文件每10天轮循,并删除超过1个月的日志。配置完后,logrotate的运作完全自动化,其实与系统的定时任务调用自定义脚本作用相同,它的运行也是定时任务来调用它的配置文件,从而实现上述效果的
安装命令非常简单(一般系统都会默认安装)
yum install logrotate crontabs
配置文件目录
/etc/logrotate.d
#所有需要此功能的配置文件存放目录
[root@centos logrotate.d]# cat zabbix-agent
/var/log/zabbix/zabbix_agentd.log {
daily
rotate 12
compress
delaycompress
missingok
notifempty
create 0664 zabbix zabbix
}
参数说明
daily #指定转储周期为每天
weekly #指定转储周期为每周
monthly #指定转储周期为每月
rotate 12 #转储的次数
compress #通过gzip压缩转储以后的日志
nocompress #不需要压缩时,用这个参数
copytruncate
#用于还在打开中的日志文件,把当前日志备份并截断
nocopytruncate
#备份日志文件但是不截断
delaycompress
#和compress一起使用时,转储的日志文件到下一次转储时才压缩
notifempty
#如果是空文件的话,不转储
postrotate/endscript
#在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行
sharedscripts 运行postrotate脚本,作用是在所有日志都轮转后统一执行一次脚本。如果没有配置那么每个日志轮转后都会执行一次脚本
size size
#当日志文件到达指定的大小时才转储,Size可以指定bytes(缺省)以及KB(sizek)或者MB(sizem)
1、系统的定时任务来运行/etc/cron.daily/logrotate
[root@ ~]# cat /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
2、每天通过执行/usr/sbin/logrotate命令调用/etc/logrotate.conf这个配置文件
[root@resources ~]# 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
# 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.
3、最终调用/etc/logrotate.d下面的配置文件执行相关操作
[root@ logrotate.d]# cat vsftpd
/var/log/vsftpd.log {
# ftpd doesn't handle SIGHUP properly
nocompress
missingok
}
/var/log/xferlog {
# ftpd doesn't handle SIGHUP properly
nocompress
missingok
}
需要注意的是当/etc/logrotate.conf读入文件时,include指定的文件中的参数会覆盖默认的参数
______________分享一个切割nginx日志的例子________________
vim /etc/logrotate.d/nginx
##############################
# for cut nginx log everyday
# create by mingongge at 2017-05-31
##############################
/var/log/nginx/*.log {
daily
rotate 7
missingok
notifempty
dateext
sharedscripts
postrotate
if [ -f /usr/local/nginx/logs/nginx.pid ];then
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
fi
endscript
}
上下两个配置实现的效果相同,请各自参考按需配置
vim /servser/scripts/auto_cut_nginxlog.sh
#!/bin/sh
#####################################
# this scripts for auto cut nginx log everyday
# create by mingongge at 2017-05-31
#####################################
LOGDIR=/var/log/nginx/
DATE=`date +%F`
mv $LOGDIR/access.log $LOGDIR/nginx_access.${DATE}.log
mv $LOGDIR/error.log $LOGDIR/nginx_error.${DATE}.log
kill -USR1 `cat /var/run/nginx.pid`
cd $LOGDIR
find ./ -name “*.log” –mtime +30 |xargs -i mv {} /tmp/
#实际生产环境大家还是要小心使用rm命令,或者说最好禁用此命令改用mv(后悔药哦!!)
—————————————————————————
写文不易,扫码直接打赏民工哥吧!!