轮换后,Ubuntu 系统日志写入“.log.1”而不是“.log”

轮换后,Ubuntu 系统日志写入“.log.1”而不是“.log”

我在 AWS 上有一个安装有 Ubuntu 16.04.4 LTS 的 EC2 实例,其中系统日志写入“.log.1”而不是“.log”(例如 /var/log/auth.log.1 而不是 /var/log/auth.log)。

logrotate.conf 中的内容如下:

# see "man logrotate" for details
# rotate log files weekly
weekly

# use the syslog group by default, since this is the owning group
# of /var/log/syslog.
su root syslog

# 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

当我重新启动 syslog ( service rsyslog restart) 时,日志开始写入“.log”。但是一旦文件旋转,它就会恢复为“.log.1”。

我该如何解决这个问题,以便日志在轮换后继续写入“.log”?

我对 Linux 了解不多。所以如果我还没有找到明显的解决方案,请见谅。

编辑:添加 /etc/logrotate.d/rsyslog 的内容

/var/log/syslog
{
        rotate 7
        daily
        missingok
        notifempty
        delaycompress
        compress
        postrotate
                invoke-rc.d rsyslog rotate > /dev/null
        endscript
}

/var/log/mail.info
/var/log/mail.warn
/var/log/mail.err
/var/log/mail.log
/var/log/daemon.log
/var/log/kern.log
/var/log/auth.log
/var/log/user.log
/var/log/lpr.log
/var/log/cron.log
/var/log/debug
/var/log/messages
{
        rotate 4
        weekly
        missingok
        notifempty
        compress
        delaycompress
        sharedscripts
        postrotate
                invoke-rc.d rsyslog rotate > /dev/null
        endscript
}

答案1

系统日志写入“.log.1”

看了你的配置,我怀疑你对这个问题的描述可能不准确。Gerald 是对的 - 你确实应该升级主机操作系统,但与此同时......

出于性能原因,大多数守护进程都会在日志文件上保留一个打开的文件句柄。文件本身可以重命名 - 就像这里发生的那样,但打开的文件句柄仍然指向相同的数据流。

(w|b)tmp 的配置没有 postrotate 脚本,该脚本用于告诉写入日志文件的程序应该关闭并重新打开它们。

看起来最多/var/log 中的文件确实有一个后轮换脚本。因此,如果这些文件受到影响,则会出现严重问题。

我在这里没有看到 auth.log 的配置,在我的本地系统上,它位于 /var/log 中并由 rsyslog 处理(我检查了 /etc/rsyslog.conf)。但是一定是有人重命名了这个文件。

您可能只需要在您的主机上找到您尚未在此处显示的配置并添加....

        sharedscripts
        postrotate
                invoke-rc.d rsyslog rotate > /dev/null
        endscript

相关内容