logrotate设置日志转储

在不设置转储的情况下,日志文件会越来越大,随着时间积累甚至会达到数G。这时候需要设置日志转储。logrotate会根据已有的配置文件,在文件的大小超过了规定值时,将当前的日志文件做压缩,同时删除最老的文件

新增/修改需要设置转储

logrotate的所有配置文件都在/etc/logrotate.d目录下
一个常见的文件格式:

"/var/log/syslog"
"/var/log/user.log"
{
  # truncate file, do not delete & recreate
  copytruncate

  # compress rotated files with gzip
  compress

  # postpone compression to the next rotation
  delaycompress

  # ignore missing files
  missingok

  # do not rotate empty files
  notifempty

  # logrotate allows to use only year, month, day and unix epoch
  dateext
  dateformat -%Y%m%d-%s

  # number of rotated files to keep
  rotate 4

  # do not rotate files unless both size and time conditions are met
  weekly
  minsize 10M

  # force rotate if filesize exceeded 100M
  maxsize 100M

  postrotate
      /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
      reload rsyslog >/dev/null 2>&1 || true
  endscript
}

开头的

"/var/log/syslog"
"/var/log/user.log"

表示这个文件是针对/var/log/syslog和/var/log/user.log做的配置

下面的各项参数表示转储的配置:
weekly:当前的文件存在超过一周才能够转储。也可以配置成daily(每天检查)、monthly(每月)

minszie 10M:文件要超过了10M才会做转储

maxsize 100M:当文件的大小超过100M,即使文件本身存在还没超过一周,也会被转储

rotate 4:转储的文件最多保存4个

dateext
dateformat -%Y%m%d-%s :转储文件的命名格式,二者要连到一起用,表示每个转储文件都会以当前date时间命名

compress:转储的文件会被压缩

missingok:如果文件不存在,不检查转储

notifempty:文件为空,跳过检查

  postrotate
      /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
      reload rsyslog >/dev/null 2>&1 || true
  endscript

postrotate与endscript要连在一起用,表示配置执行完后执行的动作,这里表示让rsyslog重新载入配置文件

logrotate与cron定时任务

logrotate本身是绑定cron定时任务执行的,一般在/etc/cron.daily/logrotate可以看到它的执行参数

#!/bin/sh

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

cron.daily里的任务是每日执行的,在/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

关于cron定时任务这里不多做介绍。总之上面的配置表示每天的4:12会执行依次logrotate,logrotate执行时就会检查各项配置文件,判断是否做转储。这意味着,如果在一天内日志文件增长很大,logrotate也不会自动做转储,一定是等到定时任务触发后才会执行。

systemctl status crond查看系统当前定时任务服务有没有启动

使用logrotate

也可以选择手动触发
logrotate -d /etc/logrotate.d/syslog 测试配置文件syslog的运行结果(不会产生实际效果,用来检查文件内容对不对)
logrotate -f /etc/logrotate.d/syslog 强制执行配置文件syslog

你可能感兴趣的:(linux)