仅在网络接口启动后才启动初始化脚本

仅在网络接口启动后才启动初始化脚本

我有一个使用 mpd 在 gentoo 上运行的无头媒体服务器。Mpd 配置为在启动时启动(我也没有同时运行 rc 脚本),但不幸的是,如果 mpd 无法绑定到接口,它将无法启动。我尝试为我的无线局域网提供一个静态 IP 地址,但有时 mpd 无法启动,因为 wlan 卡尚未与接入点关联(我使用的是 wpa_supplicant)。

现在,当 ssh 启动时,它会很乐意等待界面出现。但即使经过一番挖掘,我也无法找出它是如何做到这一点的。

我的糟糕破解方法是让 mpd 脚本等待“足够”的时间让 wlan 卡关联,但这并不在任何情况下都有效。

有人能指点一下吗?

注意:相关问题没有回答我的问题(但可能对其他人有用):

在 Linux 中连接到无线网络时运行脚本, 和 Linux 如何仅在我在线时启动 Skype 或其他程序

答案1

在 gentoo 启动脚本中(示例中为 /etc/init.d/mpd ),应该有一个

 depend() { ... }

靠近顶部的部分。这是 init 最终确定启动顺序的方式。您应该在那里放置一个要求,要求在启动 mpd 之前完成网络。我认为该行是

 need net

检查 /etc/init.d/sshd 中的依赖部分中的内容。如果将其添加到 mpd 启动脚本中,那么其中的同一行应该可以正常工作。

答案2

一个通用的方法是尝试循环启动 mpd,直到它成功启动。我相信当 mpd 由于某些原因无法启动时,它通常会抛出一个特定的退出代码(您可以在启动脚本中捕获该代码)。

答案3

/etc/wpa_supplicant/ifupdown.sh

# This file is executed by ifupdown in pre-up, post-up, pre-down and
# post-down phases of network interface configuration. It allows
# ifup(8), and ifdown(8) to manage wpa_supplicant(8) and wpa_cli(8)
# processes running in daemon mode.

脚本的第 144 行左右(在我的副本上)似乎执行了后续操作 - 您应该能够将启动 mpd 放在这里,除非有人能想到更好的地方。

答案4

您提供的第一个链接中的一个答案建议放入一个脚本,/etc/network/if-up.d这也是我向您提出的建议。您试过吗?

相关内容