如何让sendmail写入新的邮件日志

如何让sendmail写入新的邮件日志

我想要轮换我的邮件日志,但我想确保新轮换的日志包含上一个日志的最后 2M 行:

    # write the last 2M lines to a new log
    tail -n 2000000 /var/log/maillog > /var/log/maillog.new

    # move the existing log to datestamped backup
    datestamp=`date "+%Y%m%d"`
    mv /var/log/maillog /var/log/maillog.$datestamp

    # move the new log to normal log
    mv /var/log/maillog.new /var/log/maillog

    # tell sendmail to reload
    killall -HUP sendmail

这一切都有效,除了 sendmail 继续写入备份日志文件“maillog.yyyymmdd”而不是正确的“maillog”之外!

执行此操作的正确方法是什么,而不必先停止 sendmail,轮换,然后重新启动?

答案1

通常邮件日志是由 编写的syslogd,而不是由其sendmail本身编写,因此您应该发送 SIGHUP 到syslogd

答案2

您可以创建自己的日志文件

[admin@local ~]# killall sendmail
[admin@local ~]# touch /var/log/sendmail.log
[admin@local ~]# sendmail -bd -q15m >> /var/log/sendmail.log

[admin@local ~]# tail -f /var/log/sendmail.log

451 4.0.0 /fake/path/sendmail.cf: line 0: cannot open: No such file or directory

答案3

在过去,您只需(所有这些都以 root 身份)停止 sendmail(/etc/init.d/sendmail stop 或 service sendmail stop),然后您将 /var/log/maillog 移动到 /var/log/maillog .1 然后您将使用“touch /var/log/maillog”创建一个新的邮件日志,然后重新启动sendmail(/etc/init.d/sendmail start 或service sendmail start)。这在所有 *NIX 风格和发行版中都相当普遍,可以追溯到 90 年代初期。

但是今天您重新启动 sendmail,即使您移动了旧日志文件,它仍然会尝试写入旧日志文件,并且无论您设置用户或权限如何,都不会写入新文件。如果您错误地删除了它正在使用的邮件日志文件,您将看不到它正在记录的任何内容。所以你会怎么做?

Linux 开创了一种更新的做事方式,有时是为了安全,有时是为了自动化。因此,他们增强了系统日志流程,有些事情的工作方式并不完全相同,但很接近。

在现代 Linux 上(大约 2012 年或更新版本,您可能必须这样做):

1)停止发送邮件

/etc/init.d/sendmail stop

或者

service sendmail stop

2)将日志文件移动到备份位置并创建一个新的

rm /var/log/maillog.2.gz
mv /var/log/maillog.1 /var/log/maillog.2
mv /var/log/maillog /var/log/maillog.1
touch /var/log/maillog

3)设置/var/log/maillog文件的所有权权限

chown root:root /var/log/maillog
chmod 600 /var/log/maillog

4)然后告诉 SYSLOGD 重新加载它的配置,如果您是一个老 *NIX hack,那么这部分将拯救您。如果您不这样做,无论您做什么,sendmail 都不会写入您创建的新 /var/log/maillog 文件。

pkill -HUP rsyslog

5) 现在是时候重新启动 sendmail 了:

/etc/init.d/sendmail start

或者

service sendmail start

如果您跟踪 /var/log/maillog 文件,如果邮件正在流动,您应该会看到输出。

我希望这可以节省一些时间。

谢谢,大卫

相关内容