转载https://blog.csdn.net/a_tu_/article/details/80776461

logrotate是个十分有用的工具,它可以自动对日志进行截断(或轮循)、压缩以及删除旧的日志文件。例如,你可以设置logrotate,让/var/log/foo日志文件每30天轮循,并删除超过6个月的日志。配置完后,logrotate的运作完全自动化,不必进行任何进一步的人为干预。另外,旧日志也可以通过电子邮件发送,不过该选项超出了本教程的讨论范围。

1、在/etc/logrotate.d/ 路径下建立自己的日志配置文件,如下所示:

第一行:要管理的日志文件

daily: 按天转存

dateext: 按日志备份文件

rotate: 共备份5份,之后会依次替换掉最旧的文件

size=1M:当日志文件达到1M时,才备份

最后3句:必须重启rsyslogd程序,否则日志转存之后,不会写入最新的文件

 

另外,如果你的远程服务器没有建立好连接,也会影响本地日志的生产速度

 

四、logrotate触发过程

centos从6开始,daily   hourly  monthly weekly等这些文件夹里面的任务已经不用crond处理,而是交给了anacron处理

1、/etc/cron.hourly/0anacron 会每小时定时运行,由 /etc/cron.d/0hourly 每小时调用一次

/etc/cron.hourly/0anacron 内容如下

if test -r /var/spool/anacron/cron.daily; then
    day=`cat /var/spool/anacron/cron.daily`
fi
if [ `date +%Y%m%d` = "$day" ]; then
    exit 0;
fi


# Do not run jobs when on battery power
if test -x /usr/bin/on_ac_power; then
    /usr/bin/on_ac_power >/dev/null 2>&1
    if test $? -eq 1; then
    exit 0
    fi
fi
/usr/sbin/anacron -s

它会检测系统当前时间和/var/spool/anacron/cron.daily(谁写入的还没搞清楚)文件里的日期是否一致,一致就退出,否则运行anacron 

 

2、anacron 程序启动,它的配置文件为/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=54   (延时54分、默认延时最小为6分)
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22  这个设置就是你看到日志切割的时间范围,一般是凌晨3点+RANDOM_DELAY+5 大约是凌晨3:59切割文件

下面任务列表:第一列是轮询天数、第2列是延时时间(单位分钟)、第3、4列是任务描述和命令,在此调用daily、weekly、monthly任务
#period in days   delay in minutes   job-identifier   command
15cron.dailynice run-parts /etc/cron.daily
725cron.weeklynice run-parts /etc/cron.weekly
@monthly 45cron.monthlynice run-parts /etc/cron.monthly

 

3、由上面的anacron 调用cron.daily任务后,logrotate程序得以执行

cat /etc/cron.daily/logrotate ,内容如下:

#!/bin/sh
/usr/sbin/logrotate -s /var/lib/logrotate.status /etc/logrotate.conf    (这里的路径要注意,有的是 /var/lib/logrotate/logrotate.status)
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0

logrotate程序调用配置文件/etc/logrotate.conf 及/etc/logrotate.d/路径下的配置,生成按天、周、月为周期的文件。

 

遗留问题:

logrotate生成的备份日志,日期不太对,没有明确的分隔点。例如16号生成的日志,备份到了17号文件里,而17文件里包含部分18号的内容。

我感觉这类问题,应该通过START_HOURS_RANGE这个参数来设置以尽量缩小时间误差。

 

---------------------
作者:斷點1
来源:CSDN
原文:https://blog.csdn.net/a_tu_/article/details/80776461
版权声明:本文为博主原创文章,转载请附上博文链接!