Entendendo a ordem de inicialização do linux em /etc/init.d

4

Esta questão é sobre o Debian, mas eu acho que é o mesmo em muitos ambientes Linux.

O diretório /etc/init.d define os serviços que são executados no momento da inicialização. A meu ver, existem dois mecanismos que definem quem é executado e quando:

  • diretórios de nível de execução - Os diretórios /etc/rcN.d/ , nos quais existem links simbólicos para scripts em init.d com números que definem a ordem em execução. Esses links simbólicos são gerados a partir da execução de update-rc.d .
  • arquivos insserv - .depend.start/stop/boot arquivos que são gerados a partir do utilitário insserv . Nesses arquivos, você vê os scripts em execução em TARGETS e a ordem em que eles aparecem é a ordem em execução (consulte esta postagem )

Então, primeira pergunta - Qual destes decide a ordem de inicialização?

Para alterar a ordem de inicialização, você pode editar o nome de links simbólicos nos diretórios rc.N ou alterar a ordem de aparição em .depend.start . Mas essas duas alterações serão substituídas por uma chamada para insserv ou update-rc.d .

Então, segunda pergunta - Como você controla os scripts init.d da ordem de inicialização de uma maneira que durará após uma chamada para insserv ou update-rc.d ?

    
por Nitay 21.03.2016 / 13:19

1 resposta

3

Com sysvinit (systemd é diferente, mas você usaria unidades lá, não initscripts), a ordem de inicialização é determinada durante a inicialização pela ordenação dos arquivos em /etc/rc?.d . Os links simbólicos são gerados por update-rc.d com a ajuda de insserv , que é realmente um detalhe de implementação (assim como os arquivos .depend.boot etc.). Tudo o que você precisa saber são as dependências entre initscripts, declaradas em seus cabeçalhos LSB; por exemplo, :

### BEGIN INIT INFO
# Provides:          unbound
# Required-Start:    $network $remote_fs $syslog
# Required-Stop:     $network $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
### END INIT INFO

Se você quiser alterar a ordem de inicialização, você precisa adicionar dependências aos initscripts relevantes. A maneira mais segura de fazer isso é adicionar substituições a /etc/insserv/overrides : criar um novo arquivo lá com o mesmo nome do script que você deseja substituir e gravar o novo cabeçalho nesse arquivo. Em seguida, execute update-rc.d yourscript defaults para recalcular os links simbólicos.

Você encontrará mais informações nas páginas de manual de insserv e update-rc.d .

    
por 21.03.2016 / 13:45