![这个初始化脚本如何在没有依赖项的情况下启动?](https://linux22.com/image/54114/%E8%BF%99%E4%B8%AA%E5%88%9D%E5%A7%8B%E5%8C%96%E8%84%9A%E6%9C%AC%E5%A6%82%E4%BD%95%E5%9C%A8%E6%B2%A1%E6%9C%89%E4%BE%9D%E8%B5%96%E9%A1%B9%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%E5%90%AF%E5%8A%A8%EF%BC%9F.png)
我正在研究一些 lsb 初始化脚本。这是其中之一的初始化信息:
### BEGIN INIT INFO
# Provides: myscript
# Required-Start: networking myotherscript
# Required-Stop: networking myotherscript
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Starts my daemon
### END INIT INFO
以及来自 myotherscript 的初始化信息
### BEGIN INIT INFO
# Provides: myotherscript
# Required-Start: networking
# Required-Stop: networking
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Starts my other daemon
### END INIT INFO
如果我理解正确,service myscript start
除非 myotherscript 正在运行,否则运行应该不起作用。然而,执行service myscript start
确实有效。
为什么我至少没有收到有关未满足依赖关系的错误?
答案1
这service
命令除了使用提供的参数运行 init 脚本之外没有做更多的事情。特别是,它不处理依赖关系。
在 Fedora/RHEL/CentOS 和 Debian/Ubuntu/Mint(可能还有其他)上,注释中记录的依赖项仅由服务脚本管理实用程序考虑chkconfig
。如果您直接调用脚本,则不会考虑它们,其想法是,如果您这样做,您将直接干预并希望精细控制您正在操作的服务(例如,您可能正在本地运行- 依赖项的已安装版本,或者您可能在虚拟化环境中的不同来宾中运行它)。这符合最低有效位它仅指定应用程序和发行版之间的接口,而不指定发行版和管理员之间的接口。
缺乏对依赖项的内置支持是 SysVinit 的缺陷之一,它正在慢慢被 Systemd 淘汰。