我想要轮换我的邮件日志,但我想确保新轮换的日志包含上一个日志的最后 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 文件,如果邮件正在流动,您应该会看到输出。
我希望这可以节省一些时间。
谢谢,大卫