我在 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