我正在研究一些 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 淘汰。