如何在两个相互依赖的 upstart 或 /etc/init.d 服务之间设置更大的延迟?

如何在两个相互依赖的 upstart 或 /etc/init.d 服务之间设置更大的延迟?

我的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 启动脚本并使用sleepbash 命令添加延迟。我知道这不是很干净,也许有人有更好的解决方案。

答案3

放弃两个单独的启动脚本,只需创建一个以正确的顺序调用这两个脚本,并使用你喜欢的任何依赖逻辑

相关内容