![使用 systemctl 启用 Postfix 服务但无法在启动时启动时,会导致问题](https://linux22.com/image/775521/%E4%BD%BF%E7%94%A8%20systemctl%20%E5%90%AF%E7%94%A8%20Postfix%20%E6%9C%8D%E5%8A%A1%E4%BD%86%E6%97%A0%E6%B3%95%E5%9C%A8%E5%90%AF%E5%8A%A8%E6%97%B6%E5%90%AF%E5%8A%A8%E6%97%B6%EF%BC%8C%E4%BC%9A%E5%AF%BC%E8%87%B4%E9%97%AE%E9%A2%98.png)
在Rocky Linux版本 8.5 的机器(下游与 Red Hat Enterprise Linux 完全兼容),我已配置 Postfix + Dovecot 设置。在排除所有配置错误后,我至少可以启动这两项服务。
systemctl enable dovecot.service
systemctl enable postfix.service
重启机器后,使用 查询时,我可以看到 Dovecot 已正确启动systemctl status dovecot
。另一方面,Postfix 启动失败,并报告:
[root@mail ~]# systemctl status postfix
● postfix.service - Postfix Mail Transport Agent
Loaded: loaded (/usr/lib/systemd/system/postfix.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since ...; 12min ago
Process: 1419 ExecStart=/usr/sbin/postfix start (code=exited, status=1/FAILURE)
Process: 1396 ExecStartPre=/usr/libexec/postfix/chroot-update (code=exited, status=0/SUCCESS)
Process: 1364 ExecStartPre=/usr/libexec/postfix/aliasesdb (code=exited, status=0/SUCCESS)
systemd[1]: Starting Postfix Mail Transport Agent...
postfix/postfix-script[1506]: fatal: the Postfix mail system is already running
systemd[1]: postfix.service: Control process exited, code=exited status=1
systemd[1]: postfix.service: Failed with result 'exit-code'.
systemd[1]: Failed to start Postfix Mail Transport Agent.
使用快速检查postfix status
显示它确实没有运行。但令人惊讶的是,postfix start
然后启动服务没有任何问题。然后查询postfix status
报告 Postfix 正在使用新的 PID 顺利运行。systemctl status postfix
之后再次查询显示与之前相同的错误报告。
但是,报告的错误毫无意义。我可以systemctl disable postfix
,重新启动机器,使用systemctl status postfix
和检查 Postfix 确实没有运行postfix status
,尝试使用启用它systemctl start postfix
,但得到相同的错误。
此外,如果我在 systemd 中禁用 Postfix 服务,重新启动机器并仅使用 启动它postfix start
,该服务将启动,但systemctl status postfix
会报告其为已加载、处于非活动状态......
[root@mail ~]# postfix start
postfix/postfix-script: starting the Postfix mail system
[root@mail ~]# postfix status
postfix/postfix-script: the Postfix mail system is running: PID: 2169
[root@mail ~]# systemctl status postfix
● postfix.service - Postfix Mail Transport Agent
Loaded: loaded (/usr/lib/systemd/system/postfix.service; disabled; vendor preset: disabled)
Active: inactive (dead)
[root@mail ~]#
为什么 RHEL 上的 Postfix 甚至被注册为服务,而它却断然拒绝以服务的方式工作?那么,确保 Postfix 在启动时启动的正确方法是什么?
笔记:我chkconfig postfix on
按照网上有人的建议尝试了一下。但这只是将请求转发给了systemctl enable postfix.service
我,让我回到了起点。
...我真的必须在使用时对其进行破解吗/etc/rc.local
,当文件本身的内容表明它只是为了兼容性目的,不应该再使用,我应该考虑使用 systemd 服务?
更新 1:我选择了目前看来合理的解决方法 - 使用postfix start
中的命令启动 postfix /etc/rc.local
。重启后,Postfix 仍然没有运行。使用 检查 rc-local 服务的状态systemctl status rc-local
,服务无法启动,日志中的原因与我启用它后 Postfix 服务日志中所述的原因完全相同systemctl
- “致命:Postfix 邮件系统已在运行”。Postfix 在任何情况下都无法在启动时启动。
答案1
这听起来像是 SysV 和 systemd 冲突。尝试在 systemd 中禁用该服务并重新启动,看看它是否运行。它可能会运行。
sudo systemctl disable posfix
sudo init 6
请注意,我使用是init 6
因为这是重启的最原始方式。reboot
和shutdown
函数执行额外的操作,可能会引起副作用。最新的方法其实是systemctl reboot
,不过我还没用过。
这应该不会给您带来任何错误并且它可能会运行。
如果使用 SysV,那么您应该会看到/etc/rc?.d
(其中?
是从 1 到 6 的数字) 下引用 postfix 的链接。
另外,postfix 可能通过检查 PID 文件来检测它是否已在运行,而不是通过检查具有该 PID 的进程是否确实在运行。这将是我的下一次尝试。当进程启动失败时,我经常在启动之前进行干净停止,因此此类清理有机会被重置:
systemctl stop postfix
systemctl start postfix