rc 文件夹是否包含启动时启动的文件?

rc 文件夹是否包含启动时启动的文件?

我在 中创建了一个文件/etc/rc0.d,将其命名为rc.local.

在此文件中,我添加了一行来运行我放入的另一个文件Desktop。我做了这一切,以便该命令可以在启动时运行。我跟着本文中的说明(第一种方法),但似乎没有任何作用。

为什么这不起作用?

答案1

/etc/rc.d/您链接的说明中提到的是一个主要是历史目录,该目录曾经用于将所有启动脚本目录分组在一起:会有/etc/rc.d/init.d//etc/rc.d/rc0.d//etc/rc.d/rc1.d等等。大多数现代发行版早已选择省略该rc.d目录并将其他目录直接放在/etc/.

/etc/rc0.d/应该包含到脚本的符号链接(脚本的实际位置应该是/etc/init.d/系统关闭或断电

/etc/rc6.d/用于链接到应在以下位置执行的脚本重启(即当关闭系统并打算立即重新启动时,例如安装内核更新后)。

最适合脚本链接的目录是 或/etc/rc3.d//etc/rc5.d/具体取决于您的系统配置和系统的默认运行级别(如果使用 SysVinit)。基于 Debian 的 Linux 发行版通常使用运行级别 3 来实现正常的多用户状态(假设是经典的 SysVinit),而基于 RedHat/Fedora 的发行版将使用运行级别 5 来实现启用 GUI 登录的多用户状态,并使用运行级别 3 来实现多用户状态禁用本地 X11 GUI 子系统。

任何目录中的符号链接名称/etc/rc?.d/都应以大写 S 或大写 K 开头,后跟(通常)两位数数字,以标识脚本在启动顺序中的相对位置该目录中的链接。大写的 S 将使系统使用命令行参数运行链接脚本start,而 K 将使系统stop使用该参数。

因此,您的脚本应该被放入/etc/init.d/rc.local,然后您应该创建一个或两个符号链接,如下所示:

ln -s /etc/init.d/rc.local /etc/rc3.d/S99rc.local
ln -s /etc/init.d/rc.local /etc/rc5.d/S99rc.local

但这还不是全部!

现代Linux发行版,即使是那些使用经典SysVinit而不是的systemd,也倾向于使用各种解决方案来并行执行各种系统启动任务,而不是严格地逐一运行它们。这是因为在现代多核 CPU 上,并行化将使启动过程更快。在这种情况下,您应该在脚本的开头添加一个特定格式的注释块来定义脚本所依赖的系统服务,否则并行逻辑可能会运行脚本太快了,在首先启动所需的系统服务之前。

如果您的发行版使用systemd,这一点尤其重要,因为即使某些发行版的“出厂默认”默认值rc.local也会在启动过程中很早就执行,除非您添加合适的依赖关系定义。

http://refspecs.linuxbase.org/LSB_3.1.1/LSB-Core-generic/LSB-Core-generic/initscrcomconv.html有关 SysVinit 样式启动/关闭脚本的推荐注释块的当前规范。

简而言之,您可能希望在脚本的开头添加类似的内容rc.local

### BEGIN INIT INFO
# Provides: rc.local
# Required-Start: $local_fs $network $remote_fs
# Required-Stop: $local_fs $network $remote_fs
# Default-Start:  2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: run locally-configured start-up commands
### END INIT INFO

在我看来,方法 1您链接的说明包含不完整和旧的建议。其他两种方法对于新用户来说可能更容易,但不包括如何确定这些方法是否适用于任何给定发行版的说明。

相关内容