了解 /etc/init.d 中的 linux 启动顺序

了解 /etc/init.d 中的 linux 启动顺序

这个问题是关于Debian的,但我猜在很多linux环境下都是一样的。

/etc/init.d目录定义了在引导时运行的服务。在我看来,有两种机制可以定义谁运行以及何时运行:

  • 运行级别目录 -/etc/rcN.d/目录中存在指向脚本的符号链接,init.d其中的数字定义了运行顺序。这些符号链接是通过运行生成的update-rc.d
  • insserv 文件 -.depend.start/stop/boot从该实用程序生成的文件insserv。在这些文件中,您可以看到 下正在运行的脚本TARGETS,它们出现的顺序就是运行顺序(请参阅这个帖子

那么第一个问题 - 其中哪一个决定启动顺序?


为了更改启动顺序,我想您可以编辑rc.N目录中的符号链接名称,或者更改.depend.start.但是这两个更改都将通过调用insserv或来覆盖update-rc.d

那么第二个问题 - 如何以在调用insservor后持续的方式控制启动顺序 init.d 脚本update-rc.d

答案1

对于sysvinit(systemd 是不同的,但您可以在那里使用单元,而不是 initscripts),引导顺序在引导期间由/etc/rc?.d.那里的符号链接是在update-rc.d的帮助下生成的insserv,这实际上是一个实现细节(与.depend.boot等文件一样)。您需要关心的只是 initscripts 之间的依赖关系,在它们的 LSB 标头中声明;例如:

### BEGIN INIT INFO
# Provides:          unbound
# Required-Start:    $network $remote_fs $syslog
# Required-Stop:     $network $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
### END INIT INFO

如果要更改启动顺序,则需要向相关的initscripts添加依赖项。最安全的方法是添加覆盖/etc/insserv/overrides:在那里创建一个与您希望覆盖的脚本同名的新文件,并将新标头写入该文件。然后运行update-rc.d yourscript defaults重新计算符号链接。

您可以在手册页中找到更多信息insservupdate-rc.d

相关内容