在 Debian 6 及更高版本中,使用 LSB init 样式,我使用 update-rc 添加了在启动时运行的新服务器,它们确实出现在 /etc/rc2.d 中(2 是我的运行级别),它们甚至在启动时启动(耶)。我的问题是,查看 /etc/rc2.d 目录或通过其他方式,我如何确定它们的运行顺序,以便检查所有依赖项是否正确?
谢谢。
答案1
1)在 rc*.d 文件夹中,所有符号链接均根据符号链接名称中的数字执行。
例如:
S16openvpn
S19postgresql
...
S23ntp
...
这里将首先执行 S16,然后是 S19,依此类推。还请注意,在启动过程中,来自上一个运行级别 (/etc/rc2.d) 的所有服务都已启动(通常运行级别在启动时自动启动)。
2)每个 LSB 脚本都有一个描述运行级别和依赖关系的标题。
在这种情况下,rc*.d 文件夹中的“SXXyyy”是指向 /etc/init.d 文件夹中脚本的符号链接。如果显示脚本内容,您可以立即看到 LSB 标头,其中包含有关依赖项和运行级别的所有详细信息。如下所示:
### BEGIN INIT INFO
# Provides: pulseaudio esound
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Should-Start: udev NetworkManager
# Should-Stop: udev NetworkManager
# Default-Start: 2 3 4 5
# Default-Stop: 1
# Short-Description: Start the PulseAudio sound server
# Description: System mode startup script for
# the PulseAudio sound server.
### END INIT INFO
每次运行 update-rc.d 时,它都会检查所有脚本中的 LSB 标头(来自 /etc/init.d),并根据标头的 Default-Start 和 Default-Stop 行将 S 和 K 符号链接放置到所需的 rc*.d 文件夹。
另请参阅:
https://wiki.debian.org/LSBInitScripts
https://www.debian.org/doc/manuals/debian-reference/ch03.en.html#_sysv_style_init
https://superuser.com/questions/308735/why-do-scripts-beginning-with-an-s-exist-in-etc-rc-d-rc0-6-d