1

在 Ubuntu 12.10 上,将以下条目添加到“/etc/logrotate.d”路径:

# cat /etc/logrotate.d/tsdb
/home/logs/*dat {
        daily
        rotate 30
        compress
        missingok
        notifempty
        create 0664 nagios nagios
}

下面是“/etc/cron.daily/logrotate”文件的样子:

# cat /etc/cron.daily/logrotate
#!/bin/sh

# Clean non existent log file entries from status file
cd /var/lib/logrotate
test -e status || touch status
head -1 status > status.clean
sed 's/"//g' status | while read logfile date
do
    [ -e "$logfile" ] && echo "\"$logfile\" $date"
done >> status.clean
mv status.clean status

test -x /usr/sbin/logrotate || exit 0
/usr/sbin/logrotate /etc/logrotate.conf

我预计日志会旋转,但我没有看到它们被旋转。我在这里做错了什么?

状态文件确实显示 logrotate 在有问题的文件上运行,但我没有看到任何旋转的日志:

# cat /var/lib/logrotate/status
logrotate state -- version 2
"/home/logs/service-perfdata.dat" 2013-11-26
"/home/logs/host-perfdata.dat" 2013-11-26

此外,“/etc/logrotate.conf”文件如下所示:

# 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

# uncomment this if you want your log files compressed
#compress

# packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own wtmp, or btmp -- we'll rotate them here
/var/log/wtmp {
    missingok
    monthly
    create 0664 root utmp
    rotate 1
}

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

# system-specific logs may be configured here

以下是手动运行 logrotate 的输出:

# /usr/sbin/logrotate -vd /etc/logrotate.conf

rotating pattern: /home/logs/*dat  after 1 days (30 rotations)
empty log files are not rotated, old logs are removed
considering log /home/logs/host-perfdata.dat
  log does not need rotating
considering log /home/logs/service-perfdata.dat
  log does not need rotating
4

1 回答 1

2

The way logrotate handles log files initially, is non-intuitive:

  • The first time it runs, it will write the date and log file names out to the status file (it won't rotate any logs).
  • The next time it runs, it will check the status file to see if the logs should be rotated.

In your case, you saw that it checked the files in question, and wrote a status line for each the first time it ran. Any subsequent runs will use the date on that line and compare it against your log file dates to see if it should rotate. I suspect your files were dated Nov 26, and it checked on Nov 26, so they didn't need rotating. Either backdating your log files, or backdating the entry in the status file would get it to rotate the files for you.

Without an entry in the status file, even if the files need rotating it won't rotate them the very first time it's run, unless you use the -f (force) flag.

于 2014-04-05T16:05:46.103 回答