为什么我必须手动将/ etc / services和/etc/resolv.conf复制到/ var / spool / postfix / etc中?

我遇到了这个问题,我的Postfix安装:

https://www.virtualmin.com/node/23909

即我得到的错误:

postfix/smtp[130]: fatal: unknown service: smtp/tcp 

和上面的url一样,解决scheme是手动将/etc/services/etc/resolv.conf复制到/var/spool/postfix/etc

我的印象是这个“刚刚开始发生”,以前不是一个问题,但是我只是做了postfix main.cf微小的看似无关的变化,所以我不明白为什么。

我所关心的Postfix安装教程没有提及任何有关手动复制这些文件的事情……这感觉就像Postfix本身应该做的事情,而不是由于某种原因。

是否有一些潜在的错误configuration会导致这种情况?

一些Postfix进程默认在chroot环境中运行。 所以在启动时通常会提供必要的文件。

在我的Debian 7系统上,文件/etc/init.d/postfix具有以下几行文件,用于复制chroot中所有必需的文件:

 FILES="etc/localtime etc/services etc/resolv.conf etc/hosts \ etc/nsswitch.conf etc/nss_mdns.config" for file in $FILES; do [ -d ${file%/*} ] || mkdir -p ${file%/*} if [ -f /${file} ]; then rm -f ${file} && cp /${file} ${file}; fi if [ -f ${file} ]; then chmod a+rX ${file}; fi done 

奇怪的是,你的安装不包括这个; 你不应该在这里自己做任何事情。

你是如何安装postfix和在哪个系统上?

看起来Postfix希望运行chroot。 有关更多信息,请参阅此处 。

您可以使用/etc/postfix/master.cfChrootconfiguration选项来更改它。

这可能是NetworkManager的计时问题。 稍后在引导过程中通过更改/etc/rc{x}.d中后缀文件的名称来加载后缀

例如:

 sudo mv /etc/rc5.d/S20postfix /etc/rc5.d/S92postfix 

你可能不得不在/etc/rc{x}.d目录下改变它。 记得重启以testing它。

如果文件只包含一行文本“#resolvconf生成的文本”,那么这很可能是引导顺序的一个问题。

首先检查“/etc/resolv.conf”是否包含名称服务器。 如果是这种情况,您的networking已正确configuration并启动。

即使在systemd postfix的现代发行版中,当前仍然由系统启动期间处理的init.d脚本启动。 要了解启动过程中发生了什么,请阅读以下文章: https : //unix.stackexchange.com/questions/233468/how-does-systemd-use-etc-init-d-scripts

Postfix是通过执行“/etc/rc1.d/K01postfix”启动的。 此脚本包含以下行以确保networking:

 # Required-Start: $local_fs $remote_fs $syslog $named $network $time 

这是问题。 我们必须确保networking不仅起来而且在线。 否则,resolv.conf将在完全创build之前从“/etc/resolv.conf”中复制。

这可以通过执行:

 systemctl enable systemd-networkd-wait-online.service 

另请参阅本文以获得更好的描述: https : //www.freedesktop.org/wiki/Software/systemd/NetworkTarget/

我发现对于这个问题最简单的解决scheme是添加一个重新启动后缀重启到/etc/rc.local