在 Ubuntu Zesty 上,以下内容将起作用:

在 Ubuntu Zesty 上,以下内容将起作用:

编辑:对于遇到此问题的其他人来说,这个问题实际上被提出/理解得非常糟糕,可以找到问题的更好描述(以及正确的解决方案)这里

我正在尝试在我的 Raspberry Pi 上设置邮件。我有设置和配置 Postfix一切都正常,除了在启动时脚本似乎在文件实际更新之前将其/etc/init.d/postfix复制到其 chroot。/etc/resolv.conf这会导致电子邮件发送因 DNS 问题而失败。

这个有更好的写法在这篇博文中以及解决方法(在启动脚本中注入“sleep 5”)。

我很好奇这种情况是如何/为什么发生的(以及为什么它可能只影响 Pi,或者影响的人很少,以至于没有被注意到/修复)以及错误实际上在哪里(所以我可以提出它 - 这是一个postfix 问题,或者 Pi 上的某些内容未按预期运行?)。

/etc/init.d/postfix文件的顶部有这个(说它依赖于网络;不确定这是否意味着它不应该在完成resolveconf之前启动?)

# Provides:          postfix mail-transport-agent
# Required-Start:    $local_fs $remote_fs $syslog $named $network $time
# Required-Stop:     $local_fs $remote_fs $syslog $named $network
# Should-Start:      postgresql mysql clamav-daemon postgrey spamassassin saslauthd dovecot
# Should-Stop:       postgresql mysql clamav-daemon postgrey spamassassin saslauthd dovecot
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Postfix Mail Transport Agent
# Description:       postfix is a Mail Transport agent

确保这种情况不会发生的预期机制是什么?

答案1

问题的发生是因为优先顺序。 postfix 启动似乎比 dhcpcd5 更早完成工作。

/etc/resolv.conf一种可能的解决方案是在 DHCP 客户端完成工作后修复后缀监狱中的问题。我建议使用dhclient并放置一个脚本来修复/etc/resolv.conf目录中的问题/etc/dhcp/dhclient-exit-hooks.d

执行放置在该目录下的脚本IP 是通过获取的dhcp,这些脚本对于在获取和/或更改 IP 地址后采取所需的措施非常有用。

我实际上有一个关于这里主题的问题:处理 ISP 更改 IP 地址的更好方法?

Debian系统中的相关软件包是isc-dhcp-client,如果没有安装,可以通过以下方式安装:

sudo apt-get install isc-dhcp-client

现在 /etc/network/interfaces必须修改才能使用它:

auto eth0
iface eth0

最后:

sudo dpkg --purge dhcpcd5

实际上,卸载后dhcpcd5(并与@Danny一起配置/etc/network/interfaces),优先级被强制执行,并且后缀问题得到解决。

不过,对于直接连接到 ISP 并永久开启的计算机,也建议使用 dhclient-exit-hooks.d 中的脚本,因为 ISP 可能会导致您的 IP 地址发生更改。

答案2

在 Ubuntu Zesty 上,以下内容将起作用:

升级到 postfix 后可能需要完成此修复。 Postscript 在重新启动后失败,因为它不等待网络恢复。这会导致它丢失 /etc/resolv.conf 中的条目 应该将这些条目复制到 /var/spool/postfix/etc/resolv.conf

更改和/或将以下内容添加到这些 systemd 文件的 [Unit] 块中:

/lib/systemd/system/[email protected]
/lib/systemd/system/postfix.service

添加或更改:

After=network-online.target

更改服务后重新加载 systemctl:

systemctl daemon-reload

reboot

注意:真正重要的文件是[电子邮件受保护]

答案3

使用 jessie 8.0 将脚本放入我的树莓派上的 /etc/dhcp/dhclient-exit-hooks.d/ 中没有执行任何操作。即使使其可执行也无济于事。看来这些脚本没有运行。
对我来说,这个问题是 systemd、网络管理器和 resolvconf 带来的复杂性的另一个糟糕例子。
向 /etc/rc.local 添加一行也不起作用。
我发现在我的系统上 /etc/rc.local 运行了 18 秒!在 /etc/resolv.conf 更新之前。
由于树莓派位于本地 LAN 上,我通过使 /etc/resolv.conf 不可变来禁用 resolvconf 机制,但即使这样也没有帮助。
/var/spool/postfix/etc/resolv.conf 现在具有正确的条目,但 postfix 仍然无法正常运行,条目挂在 mqueue 中,显示“(未找到主机或域名。name=.... 的名称服务错误” com type=MX: 未找到主机,请重试)”
我尝试在 /etc/rc.local 中使用以下行延迟 30 秒批量重新启动 postfix,( sleep 30 ; service postfix restart ) &
但这也不起作用。
但是如果我登录系统并手动重新启动 postfix 邮件就会被发送。所以我更改了 最终为我解决问题的
条目。
( sleep 30 ; /etc/init/postfix stop ; sleep 5 ; /etc/init/postfix start ) &

相关内容