Os diretórios rc0.d, rc1.d,… em / etc

30

Estou correndo Ubuntu onde tenho os diretórios /etc/rc0.d, /etc/rc1.d, /etc/rc2.d, ..., /etc/rc6.d.

Arquivos de exemplo da minha máquina:

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

Questões:

  1. Qual é o objetivo dos vários diretórios "rc"?
  2. Por que o Ubuntu instalou duplicatas de dovecote ntppara todos os diretórios, exceto rc0.de rc6.d?
  3. Se eles são especificados várias vezes como acima, eles são realmente executados várias vezes?
  4. Você pode dizer o que foi dito acima em que ordem dovecote ntpserá executado na inicialização?
  5. Qual é a maneira correta de dizer ao Ubuntu para sempre executar ntpantes dovecotna inicialização?
roger.james
fonte

Respostas:

23
  1. Estes são se runlevelsão uma iniciação no estilo System V usada pela maioria dos sistemas * NIX (com a exceção notável de systemdsistemas baseados em). Ao inicializar, o kernel / usuário decide o que runleveldeve ser executado e executa apenas isso runlevel. Isso significa que, dependendo do, runlevelvocê pode inicializar com um conjunto diferente de programas. Também existem níveis de execução para parada e reinicialização, mas como você está focando na parte de inicialização, vamos ignorá-los por enquanto.
  2. Como apenas um runlevelé executado na inicialização, alguns programas devem / desejam iniciar / parar em runlevels diferentes com parâmetros iguais ou iguais na mesma ordem ou em ordem diferente (nem todos os níveis de execução são iguais em todos os sistemas operacionais). Mas o Ubuntu copia os níveis de execução 3-5 a partir de 2, é por isso que eles são os mesmos.
  3. Os n. runlevelS são executados apenas uma vez na inicialização ou quando você altera runlevel.
  4. ntpOs scripts devem ser executados primeiro e depois dovecotno nível de execução 2-5, não no caso do nível de execução 1. O número ordinal nos nomes de script ( ) indica a ordem de execução. Portanto, tudo depende do nível de execução que você está usando.S23ntp
  5. Depende da distribuição, mas no caso específico do Ubuntu você pode adicionar seu script aos níveis de execução 1 e 2.

Mais informações no artigo da Wikipedia sobre os níveis de execução do Ubuntu

Braiam
fonte
então, se eu colocar o script em todos os diretórios do RC.X, ele será executado algumas vezes ou não?
Flash Thunder
@FlashThunder no.
Braiam 13/05/19
40

Como outros observaram, a resposta é sobre níveis de execução, que são basicamente os modos de operação de um sistema operacional. No Linux, estes são geralmente:

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.

Portanto, cada um dos rcNdiretórios contém links simbólicos para os scripts que devem ser executados nesse nível de execução. Todos os scripts reais estão normalmente no /etc/init.ddiretório:

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

Nomeação de link simbólico

Um link simbólico cujo nome começa com a Sserá iniciado no nível de execução em questão, enquanto aqueles cujo nome começa com Kserão mortos. Observe que todos os links no rc6.dnível de execução de reinicialização começam com K. Isso porque todos eles devem ser interrompidos para uma reinicialização e nada deve ser iniciado.

Os números após a letra inicial referem-se à ordem de execução dos scripts vinculados. Aqueles com números menores serão executados antes daqueles com números mais altos. Portanto, no seu exemplo específico, S23ntpserá executado (iniciado neste caso) antes S24dovecot .

terdon
fonte
Ótima resposta! E se dois scripts tiverem os mesmos números, por exemplo: S01bluetoothe S01rsync, a ordem será arbitrária?
direprobs 15/09/17
@direprobs hein, boa pergunta. Sim, eu acho que qualquer um deles seria escolhido aleatoriamente. Mas não posso dizer que eu sei.
terdon
@ tredon Eu acho que eles serão escolhidos com base em seus nomes de arquivos, pois eles começam com S01a comparação b< r, você entendeu. Talvez!
direprobs 15/09/17
1
A resposta curta é, /etc/init.d/rcdiz for s in /etc/rc$runlevel/S*; do …, simplesmente ir na ordem de expansão glob; ou seja, numérico / alfabético. A resposta longa é que o código é muito mais complicado do que eu me lembro. Vou tentar dedicar algum tempo a estudá-lo nas próximas seis a oito semanas. À primeira vista, parece que ele está extraindo o número após Se fazendo algo com ele, portanto, S42beeblebroxe S42zaphodpode estar mais associado do que, digamos, S43arthure S44dent.
G-Man diz 'Reinstate Monica'
muito obrigado pela ótima resposta, mas eu tenho uma pergunta. Eu coloquei o meu programa no arranque, mas a velocidade da aplicação é baixa: stackoverflow.com/questions/49251955/...
H.Ghassami
4

1) Os vários diretórios rcX.d especificam quais serviços iniciar ou parar durante o nível de execução 'X'.

2) rc0.d é para o nível de execução 0, que é encerrado. rc6.d é para reinicialização. Todos os demais são para níveis de execução diferentes (2 - 5). OS significa start e K for Kill. Estes são essencialmente links para os scripts originais em /etc/rc.d. Os números após S / K são a prioridade pela qual os serviços serão iniciados / Finalizados.

3) Sim, se forem especificados várias vezes, o script start / kill será executado várias vezes. Mas ninguém quer fazer isso.

4) Observando os números de prioridade, o serviço NTP será iniciado primeiro, seguido pelo dovecot.

5) O quarto ponto é o caminho.

Albert
fonte