我有一个在启动时运行的特定服务(在本例中为 OpenFire)。启动时,它会尝试连接到给定主机名的数据库。启动时,它无法连接到该数据库,因为它无法在 DNS 中找到主机。
我最好的猜测是,此服务在网络初始化和从 DHCP 获取 DNS 服务器之前在启动时执行。有没有办法指定在执行脚本之前必须满足的启动服务依赖关系/etc/init.d/
?
答案1
忘掉 upstart 吧。有更简单的方法可以做到这一点。在此处放置一个启动 Openfire 的脚本:
/etc/network/if-up.d/
如果 openfire 必须以您的用户身份运行,那么类似如下操作:
#!/bin/sh
su -c "openfire" myUserName
确保将其标记为可执行文件:
sudo chmod +x /etc/network/if-up.d/openfire
同样地,当你失去网络连接时,你可以关闭 openfire,通过在 /etc/network/if-down.d/ 中放入一个脚本来终止它:
#!/bin/sh
killall openfire
答案2
您可以查找该服务;例如,/etc/rc0.d
它将有。S##[name]
S35networking
因此,如果您让它说,S36openfire
那么它应该在联网后立即加载。或者让它说数字99
(而不是36
),它将最后加载,让网络有时间完成它的工作。
希望这对你有用。
答案3
如果你没有使用 NetworkManager 配置你的网络,你可以尝试将 upstart 配置为依赖于网络:
开始建立网络
或者
在启动网络接口时启动
我不知道它如何与 NetworkingManager 交互,也许 NM 触发了一些可通过 upstart 检测到的事件。