在两台不同的服务器上,不同的服务不会启动,但如果重新启动,则可成功启动

在两台不同的服务器上,不同的服务不会启动,但如果重新启动,则可成功启动

我在两台不同的服务器上安装了 redis 和 postgresdb。启动时两者都无法成功启动,但如果手动启动/重新启动它们,则会启动。两者的错误相同(无法绑定到地址)。以下是 postgres 日志的示例:

2021-05-27 21:12:39.703 UTC [682] LOG:  starting PostgreSQL 12.6 (Ubuntu 12.6-0ubuntu0.20.04.1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0, 64-bit
2021-05-27 21:12:39.704 UTC [682] LOG:  listening on IPv4 address "127.0.0.1", port 5432
2021-05-27 21:12:39.707 UTC [682] LOG:  could not bind IPv4 address "192.168.86.222": Cannot assign requested address
2021-05-27 21:12:39.707 UTC [682] HINT:  Is another postmaster already running on port 5432? If not, wait a few seconds and retry.

和 redis:

653:M 27 May 2021 21:12:23.090 # Could not create server TCP listening socket 192.168.86.234:6379: bind: Cannot assign requested address

这些机器在不同的硬件上运行,但都运行相同版本的 ubuntu(20.04.2 LTS)。这些 IP 地址对于这些机器来说是静态的,因此没有其他东西在使用它们,而且我可以在启动后立即找到它们(当我重新启动服务时),这让我相信这不是地址实际上在其他地方使用的情况。我不太确定问题的原因是什么。我最好的猜测是这些服务试图在网络服务完全启动/配置之前启动,但我不确定如何验证或确认这一点。有什么想法或建议吗?

答案1

您可以尝试列出依赖项(使用 ufw 作为示例):

$ systemctl list-dependencies ufw
ufw.service
● └─system.slice
$

或者查看单元文件信息(再次针对 ufw):

$ systemctl cat ufw
# /lib/systemd/system/ufw.service
[Unit]
Description=Uncomplicated firewall
Documentation=man:ufw(8)
DefaultDependencies=no
Before=network.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/lib/ufw/ufw-init start quiet
ExecStop=/lib/ufw/ufw-init stop

[Install]
WantedBy=multi-user.target
$

如果您确实需要启动网络,您可以将其添加到单元文件中:

After=network-online.target
Wants=network-online.target

您还可以查看日志以查看服务是否出现任何错误:

sudo journalctl -u ufw

相关内容