我有一个Ubuntu22.04桌面的新安装,我想在上面运行公共服务(postgreSQL,redis等)从其他主机访问。我将每个服务配置为绑定(侦听)到静态IP 192.168.1.xxx以及localhost,启动它们,它们就能工作了。
当我重新启动计算机时,这些服务不监听192.168.1.xxx,只监听localhost/127.0.0.1。当我重新启动服务时,它绑定到所有地址。没有变化。没有防火墙。SSH确实通过IP地址进行连接。下面是在重新启动后立即在本地运行的Redis示例的粘贴。
% sudo ufw status
Status: inactive
% redis-cli -h 192.168.1.200
Could not connect to Redis at 192.168.1.200:6379: Connection refused
not connected>
% redis-cli -h 127.0.0.1
127.0.0.1:6379>
% redis-cli -h localhost
localhost:6379>
% sudo lsof -i :6379
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
redis-ser 3004 redis 6u IPv4 35436 0t0 TCP localhost:redis (LISTEN)
redis-ser 3004 redis 7u IPv6 35437 0t0 TCP ip6-localhost:redis (LISTEN)
% sudo service redis-server restart
% sudo lsof -i :6379
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
redis-ser 14396 redis 6u IPv4 67757 0t0 TCP localhost:redis (LISTEN)
redis-ser 14396 redis 7u IPv6 67758 0t0 TCP ip6-localhost:redis (LISTEN)
redis-ser 14396 redis 8u IPv4 67759 0t0 TCP server:redis (LISTEN)
% redis-cli -h 192.168.1.200
192.168.1.200:6379>在引导过程中,什么会阻止服务绑定到公共IP地址?这与桌面安装有关吗?谢谢你提前给你时间!
发布于 2023-04-06 21:21:31
谢谢每一个发表建议的人。它支持了我的直觉,当服务开始时,网络还没有准备好。我得以证实:
发布于 2023-04-06 07:01:43
服务可能会在网络接口完全准备好并配置好之前启动,从而使服务只与localhost绑定,而不是您想要的IP。
您可以在服务启动之前检查它是否已完全就绪和配置,首先将systemd服务文件配置为依赖于正在运行的网络,方法是将该行添加到[Unit]节After=network-online.target中。您还可以修改/etc/systemd/resolved.conf以包括静态IP地址,例如
DNS=192.168.1.1
Domains=example.com您还可以使用传统的网络配置方法,编辑/etc/NetworkManager/NetworkManager.conf并设置managed=false,然后在/etc/ set /interfaces文件中配置网络接口。同样,在systemd服务文件中,您可以通过以下方式延迟服务的启动:
ExecStartPre=/bin/sleep 30
ExecStart=/usr/bin/postgresqlhttps://askubuntu.com/questions/1462475
复制相似问题