/ etc中的rc0.d,rc1.d,...目录


30

我运行Ubuntu在那里我有目录/etc/rc0.d/etc/rc1.d/etc/rc2.d,..., /etc/rc6.d

我机器上的示例文件:

directory      example symlinks in the dir
------------------------------------------
/etc/rc1.d:    K76dovecot, K77ntp
/etc/rc2.d:    S23ntp, S24dovecot
/etc/rc3.d:    S23ntp, S24dovecot
/etc/rc4.d:    S23ntp, S24dovecot
/etc/rc5.d:    S23ntp, S24dovecot

问题:

  1. 多个“ rc”目录的目的是什么?
  2. 没有Ubuntu的安装为什么重复的dovecotntp成以外的所有目录rc0.drc6.d
  3. 如果如上所述多次指定它们,它们实际上是否执行了多次?
  4. 您能从上面以什么顺序告诉您,dovecot并且ntp将在启动时执行吗?
  5. 告诉Ubuntu 在启动ntp前始终执行的正确方法是什么dovecot

Answers:


23
  1. 这些是runlevels,是大多数* NIX系统使用的System V风格的初始化(systemd基于-的系统除外)。在引导内核/用户时,runlevel它决定应该运行什么并仅执行该命令runlevel。这意味着runlevel您可以启动一组不同的程序。也有用于停止和重新引导的运行级别,但是由于您专注于启动部分,因此现在暂时忽略它们。
  2. 由于runlevel引导时仅执行一个程序,因此某些程序应该/希望以runlevel相同或不同的顺序在具有不同或相同参数的不同s 处启动/停止(并非所有操作系统中的所有运行级别都相同)。但是Ubuntu从2复制3-5的运行级别,这就是为什么它们相同的原因。
  3. runlevels的执行只是一次启动时或当您更改runlevel
  4. ntp脚本应该首先dovecot在运行级别2-5中执行,然后在运行级别1中执行,而不是在运行级别1 中执行。脚本名称()中的序数表示执行顺序。因此,这完全取决于您使用的运行级别。S23ntp
  5. 这取决于Distro,但在特定的Ubuntu情况下,您可以将脚本添加到运行级别1和2。

Wikipedia文章中有关Ubuntu运行级别的更多信息


因此,如果我将脚本放到所有RC.X目录中,它将执行几次还是不执行?
Flash Thunder

@FlashThunder号
Braiam '16

40

正如其他人指出的那样,答案全都与运行级别有关,运行级别基本上是操作系统的运行模式。在Linux上,这些通常是:

ID  Name                               Description
0   Halt                               Shuts down the system.
1   Single-user Mode                   Mode for administrative tasks.
2   Multi-user Mode                    Does not configure network interfaces and 
                                       does not export networks services.
3   Multi-user Mode with Networking    Starts the system normally.
4   Not used/User-definable            For special purposes.
5   Start the system normally with 
    with GUI                           As runlevel 3 + display manager.
6   Reboot                             Reboots the system.

因此,每个rcN目录都包含指向应在该运行级别运行的脚本的符号链接。所有实际的脚本通常都在/etc/init.d目录中:

$ ls -l /etc/rc5.d/S22cron
lrwxrwxrwx 1 root root 14 Jan 14  2013 /etc/rc5.d/S22cron -> ../init.d/cron

符号链接命名

名称开头为的符号链接S将从相关的运行级别开始,而名称开头为的链接K将被杀死。注意,其中的所有链接(rc6.d重新启动运行级别)均以开头K。这是因为应将它们全部停止以进行重新引导,并且不应启动任何操作。

首字母后面的数字表示链接脚本的运行顺序。编号较小的将在编号较大的那些之前运行。所以,在你的具体的例子,S23ntp将运行(起动在这种情况下) S24dovecot


好答案!如果两个脚本具有相同的数字,例如:S01bluetoothS01rsync,顺序将是任意的怎么办?
direprobs

@direprobs呵呵,很好的问题。是的,我想可能会随机选择其中一个。不过不能说我知道。
terdon

@tredon我认为将根据文件名来选择它们,因为从S01比较开始,它们将是b< r,您便明白了。也许!
direprobs

1
简而言之,/etc/init.d/rc就是说for s in /etc/rc$runlevel/S*; do …,它只是按照全局扩展顺序进行;即数字/字母。长答案是,其中的代码比我记得的要复杂得多。在接下来的六到八周内,我将花一些认真的时间研究它。乍一看,它看起来像它的解压后的数字S,做它的东西,所以S42beeblebroxS42zaphod可能比说更紧密相关,S43arthurS44dent
G-Man说'Resstate Monica''Sep

非常感谢您的出色回答,但是我有一个问题。我将程序放在启动中,但是应用程序的速度很慢:stackoverflow.com/questions/49251955/…–
H.Ghassami

4

1)多个rcX.d目录指定在“ X”运行级别期间要启动或停止的服务。

2)rc0.d用于关闭的运行级别0。rc6.d用于重新引导。其余全部用于不同的运行级别(2-5)。S代表开始,K代表杀死。这些实际上是指向/etc/rc.d中原始脚本的链接。S / K之后的数字是启动/杀死服务的优先级。

3)是,如果多次指定它们,则启动/终止脚本将运行多次。但是没有人愿意这样做。

4)查看优先级数字,首先启动ntp服务,然后再启动dovecot。

5)第四点就是路。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.