![如何编写对互联网可用性的启动依赖项?](https://linux22.com/image/52774/%E5%A6%82%E4%BD%95%E7%BC%96%E5%86%99%E5%AF%B9%E4%BA%92%E8%81%94%E7%BD%91%E5%8F%AF%E7%94%A8%E6%80%A7%E7%9A%84%E5%90%AF%E5%8A%A8%E4%BE%9D%E8%B5%96%E9%A1%B9%EF%BC%9F.png)
我的 Raspberry Pi (~ Debian) 上的一些服务依赖于互联网的可用性(尤其是ntpd
,由于神秘的原因)。具体来说,网络设备或链路的可用性是不够的。
当我看的时候/etc/init.d/ntp
我看到
### BEGIN INIT INFO
# Provides: ntp
# Required-Start: $network $remote_fs $syslog
# Required-Stop: $network $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: Start NTP daemon
### END INIT INFO
我认为这意味着这ntp
取决于$network
能否开始。我找到了一个参考,/etc/insserv.conf
但它没有说明设置它实际需要什么:
#
# Low level networking (ethernet card)
#
$network +networking +ifupdown
问题一:元素究竟是如何$network
定义的+networking +ifupdown
? (这样我就可以修改它并尝试在将网络声明为“up”之前到达实际主机)
问题2:如果不满足网络先决条件,ntp
启动会延迟还是会失败?
答案1
$network 是在哪里定义的?
这是一个好问题,并且我在这里概括了它。
$network 到底是如何通过 +networking +ifupdown 元素定义的?
AFAICT 它不是由此定义的,它定义了哪些服务必须(可选)还声明该设施具有的任何依赖项(?? - 请参阅我在上面发布和链接的问题)。从man insserv
:
insserv 扫描配置文件 /etc/insserv.conf 中的系统设施 [...] 此类系统设施后面的所有名称都将声明该设施所需的依赖关系。 [...] 以“+”号开头的名称被标记为可选。
事实上,在 raspbian 上/etc/init.d/networking
(通过 启动/etc/rcS.d
,无论运行级别如何,它都会在启动时运行)不是包括$network
作为先决条件,尽管其他一些服务(例如ntp
)也这样做。
Q2:如果不满足网络条件,ntp 启动是否会延迟或失败?
这些先决条件(以及 INIT INFO 块中的其他内容)仅用于设置和配置/etc/rcN.d
目录中的脚本链接,例如,当您运行时update-rc.d
(这是 的前端insserv
)。换句话说,它们在实际执行过程中不会被使用。因此,如果S02ntp
处于您的默认运行级别,它将运行无论在启动期间(除了之前的一些致命错误)。