我的PostgreSQL
服务必须在之后启动OpenVPN
,当我检查顺序 rc.X 目录时,它们被列为 S16openvpn 和 S19postgresql,因此它们的顺序正确。
但是通过 VPN 连接数据库失败,并且日志始终显示PostgreSQL
启动时无法绑定。我猜想所有 OpenVPN 服务都需要一些时间才能启动,并且PostgreSQL
在网络加载OpenVPN
完成之前启动。
OpenVPN
有没有办法让 PostgreSQL在放弃之前尝试重新加载并尝试绑定到网络?
答案1
在我看来,您正在尝试将 postgres 绑定到与隧道关联的 IP。如果是这样,这ip_nonlocal_bind
就是解决您问题的方法。设置 ip_nonlocal_bind 允许您绑定到任何 IP,即使是与您的计算机不关联的 IP,这正是您想要绑定到您还没有的 IP 时所需要的 - 例如当使用在主动和被动节点之间浮动的虚拟 IP 时。
假设这仅仅是 ipv4;
echo 1 > /proc/sys/net/ipv4/ip_nonlocal_bind
或者扔进/etc/sysctl.conf
net.ipv4.ip_nonlocal_bind
答案2
这是我在这些情况下使用了很多时间的解决方法:编辑 postresql rc.d 启动脚本并使用sleep
bash 命令添加延迟。我知道这不是很干净,也许有人有更好的解决方案。
答案3
放弃两个单独的启动脚本,只需创建一个以正确的顺序调用这两个脚本,并使用你喜欢的任何依赖逻辑