这个问题是关于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
。
那么第二个问题 - 如何以在调用insserv
or后持续的方式控制启动顺序 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
重新计算符号链接。
您可以在手册页中找到更多信息insserv
和update-rc.d
。