Les répertoires rc0.d, rc1.d,… dans / etc

30

Je suis en cours d' exécution Ubuntu où j'ai les répertoires /etc/rc0.d, /etc/rc1.d, /etc/rc2.d, ..., /etc/rc6.d.

Exemples de fichiers de ma machine:

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

Des questions:

  1. À quoi servent les multiples répertoires "rc"?
  2. Pourquoi Ubuntu a-t-il installé des doublons de dovecotet ntpdans tous les répertoires à l'exception de rc0.det rc6.d?
  3. S'ils sont spécifiés plusieurs fois comme ci-dessus, sont-ils réellement exécutés plusieurs fois?
  4. Pouvez-vous dire à partir de ce qui précède dans quel ordre dovecotet ntps'exécutera au démarrage?
  5. Quelle est la bonne façon de dire à Ubuntu de toujours s'exécuter ntpavant dovecotau démarrage?
roger.james
la source

Réponses:

23
  1. Ce sont des runlevels et sont une initiation de type System V utilisée par la plupart des systèmes * NIX (à l'exception notable des systemdsystèmes basés sur). Lors du démarrage, le noyau / l'utilisateur décide de ce runlevelqu'il doit exécuter et n'exécute que cela runlevel. Cela signifie que selon lerunlevel vous pouvez démarrer avec un ensemble de programmes différent. Il existe également des niveaux d'exécution pour l'arrêt et le redémarrage, mais comme vous vous concentrez sur la partie démarrage, ignorons-les pour l'instant.
  2. Puisqu'un seul runlevelest exécuté au démarrage, certains programmes devraient / vouloir démarrer / s'arrêter à différents runlevels avec des paramètres différents ou identiques dans le même ordre ou dans un ordre différent (tous les niveaux d'exécution ne sont pas les mêmes dans tous les systèmes d'exploitation). Mais Ubuntu copie les niveaux d'exécution 3 à 5 de 2, c'est pourquoi ils sont les mêmes.
  3. Les n ° runlevelsont exécutés une seule fois au démarrage ou lorsque vous modifiez runlevel.
  4. ntples scripts doivent s'exécuter d'abord puis dovecotau niveau d'exécution 2-5, ce qui n'est pas le cas pour le niveau d'exécution 1. Le nombre ordinal dans les noms de script ( ) indique l'ordre d'exécution. Tout dépend donc du niveau d'exécution que vous utilisez.S23ntp
  5. Cela dépend de la Distro mais dans le cas particulier d'Ubuntu, vous pouvez ajouter votre script aux niveaux d'exécution 1 et 2.

Plus d'informations dans l' article Wikipedia sur les niveaux d'exécution d'Ubuntu

Braiam
la source
donc si je mets le script dans tous les répertoires RC.X, il s'exécutera plusieurs fois ou non?
Flash Thunder
@FlashThunder no.
Braiam
40

Comme d'autres l'ont noté, la réponse est tout au sujet des niveaux d' exécution qui sont fondamentalement les modes de fonctionnement d'un système d'exploitation. Sous Linux, ce sont généralement:

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.

Ainsi, chacun des rcNrépertoires contient des liens symboliques vers les scripts qui doivent être exécutés à ce niveau d'exécution. Tous les scripts réels sont normalement dans le /etc/init.drépertoire:

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

Dénomination des liens symboliques

Un lien symbolique dont le nom commence par un Ssera démarré au niveau d'exécution en question tandis que ceux dont le nom commence par Kseront tués. Notez que tous les liens rc6.d, le niveau d'exécution de redémarrage, commencent par K. C'est parce qu'ils doivent tous être arrêtés pour un redémarrage et rien ne doit être démarré.

Les chiffres après la lettre initiale font référence à l'ordre d'exécution des scripts liés. Ceux avec des nombres plus petits seront exécutés avant ceux avec des nombres plus élevés. Ainsi, dans votre exemple spécifique, S23ntpsera exécuté (démarré dans ce cas) avant S24dovecot .

terdon
la source
Très bonne réponse! Et si deux scripts ont les mêmes numéros, par exemple: S01bluetoothet S01rsync, l'ordre sera-t-il arbitraire?
direprobs
@direprobs hein, bonne question. Oui, je suppose que l'un ou l'autre serait choisi au hasard. Je ne peux pas dire que je sache.
terdon
@tredon Je pense qu'ils seront choisis en fonction de leurs noms de fichiers car ils commencent par S01la comparaison sera b< r, vous avez l'idée. Peut être!
direprobs
1
La réponse courte est, /etc/init.d/rcdit-elle for s in /etc/rc$runlevel/S*; do …, donc elle va simplement dans l'ordre d'expansion globale; c'est-à-dire numérique / alphabétique. La réponse longue est que le code qu'il contient est beaucoup plus compliqué que je ne m'en souviens. J'essaierai de passer du temps sérieusement à l'étudier dans les six à huit prochaines semaines. À première vue, il semble extraire le nombre après le Set en faire quelque chose, S42beeblebroxet S42zaphodpourrait donc être plus étroitement associé que, disons, S43arthuret S44dent.
G-Man dit `` Réinstalle Monica '' le
vraiment merci pour la bonne réponse, mais j'ai une question. J'ai mis mon programme au démarrage, mais la vitesse de l'application est faible: stackoverflow.com/questions/49251955/…
H.Ghassami
4

1) Les multiples répertoires rcX.d spécifient les services à démarrer ou à arrêter pendant le niveau d'exécution «X».

2) rc0.d est pour le niveau d'exécution 0 qui est l'arrêt. rc6.d est pour le redémarrage. Reste que tous sont pour différents niveaux d'exécution (2 - 5). Le S signifie départ et K pour Kill. Il s'agit essentiellement de liens vers les scripts d'origine dans /etc/rc.d. Les nombres après S / K sont la priorité selon laquelle les services seront démarrés / supprimés.

3) Oui, si elles sont spécifiées plusieurs fois, le script de démarrage / arrêt sera exécuté plusieurs fois. Mais personne ne veut faire ça.

4) En regardant les numéros prioritaires, le service ntp sera démarré en premier, suivi de pigeonnier.

5) Le 4ème point est le chemin.

Albert
la source