我在两台不同的服务器上安装了 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