在删除并重新创建后,Postfix不再记录到/ var / log / mail吗?


10

我不小心删除了该/var/log/mail文件。在那之前,我可以使用后缀工具监视它。现在,似乎Postfix不会将其日志发送到/var/log/mail,因为该文件未使用新的日志消息进行更新。

Answers:


9

删除mail.log文件时,rsyslog(在ubuntu上)会松动该文件的句柄。要使其在Ubuntu上恢复工作,请提供:

sudo service rsyslog restart

这不仅会创建新文件,还会开始写入日志。


1
不用说您做了什么,而是将答案更笼统(以启发性的方式)告诉我们原因。
朱莉·佩勒捷

4

即使在创建一个空文件之后

touch /var/log/mail

您必须重新启动系统日志

service syslog restart

然后它的记录增益:)


4

这是syslog中的错误,但说明了一个在程序打开时删除文件的常见问题。当您执行“ rm”时,您将删除目录条目,但不会删除基础文件。操作系统会保留对文件引用的计数,并且在引用计数变为零之前,实际上不会删除基础文件数据。对于普通文件,未打开文件的引用计数为1(目录条目)。打开文件后,计数增加到2。如果第二个程序打开同一文件,则计数将增加到三个。如果现在删除目录条目,则计数减为2-这意味着文件是无名的(没有名称),

当您删除/ var / log / mail时,系统记录器仍会打开该文件以供写入。如果创建一个新的/ var / log / mail,它将指向与系统记录器当前正在写入的文件不同的文件。使所有内容保持一致的唯一方法是重新启动系统记录器。当原始系统记录器终止时,与之关联的所有文件都将关闭-包括您删除了其目录条目的匿名邮件日志。当您重新启动系统记录器时,它将在需要写入日志消息时重新打开/ var / log / mail,并在此后保持打开状态。

经常发现的另一种方法是,正在运行的程序将文件数据填满整个磁盘。用户删除了非常大的文件,但由于该文件仍然存在并且正在占用磁盘空间,因此并未释放磁盘空间,但是目录项已被删除。当程序结束时(由于用户杀死了它或结束了它本身),磁盘空间将被恢复,因为文件上的引用计数将变为零。

记录程序可能采取的措施是,首先编写日志消息,检查日志文件目录条目是否存在,如果不存在,请关闭原始日志文件,打开一个新的日志文件,然后重写消息-这样消息就不会丢失。但是,要执行所有这些操作,将需要比系统记录器本应具有的复杂性高得多-因为额外的目录检查,因此写入的每条消息都将花费更长的时间才能写入-每次文件包含未删除。

为了更清楚地理解上述所有内容,以下命令具有指导意义,因为它描述了执行目录条目删除和引用递减的系统调用:“ man 3 unlink”


4

这不是CentOS 7上的问题。有人认为让postfix邮件日志通过日记记录器是一个好主意。如果要查看后缀日志:

journalctl -u postfix

(查看整个日志)

journalctl -u postfix -f

(尾随日志)

您可能还需要在main.cf中添加后缀

syslog_name = postfix

1
我花了三个小时试图修复日志消失的系统。我没有找到这个帖子吗,我还要再花3个小时。我的日记有10000行,所以此命令对我也有很大帮助journalctl --vacuum-time=1d
尤金·范德默

2

将较新版本的postfix日志登录到/var/log/mail.log,我也必须运行sudo chmod a+w /var/log/mail*service postfix restart删除它后才能获取我的postfix日志

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.