Qual é a diferença entre / etc / init / e /etc/init.d/?

230

Qual é a diferença entre /etc/init/e /etc/init.d/?

De maneira mais geral, que significado o .dsufixo transmite para um diretório?

Olivier Lalonde
fonte

Respostas:

229

/etc/init.dcontém scripts usados ​​pelas ferramentas de inicialização do System V (SysVinit). Este é o pacote tradicional de gerenciamento de serviços do Linux, que contém o initprograma (o primeiro processo executado quando o kernel termina a inicialização), além de alguma infraestrutura para iniciar e parar serviços e configurá-los. Especificamente, os arquivos /etc/init.dsão scripts shell que respondem a start, stop, restart, e (quando suportado) reloadcomandos para gerir um serviço particular. Esses scripts podem ser chamados diretamente ou (mais comumente) através de algum outro gatilho (geralmente a presença de um link simbólico /etc/rc?.d/).

/etc/initcontém arquivos de configuração usados ​​pelo Upstart. Upstart é um jovem pacote de gerenciamento de serviços promovido pelo Ubuntu. Arquivos em /etc/initsão arquivos de configuração dizendo Upstart como e quando start, stop, reloada configuração, ou consultar o statusde um serviço. No lucid, o Ubuntu está em transição do SysVinit para o Upstart, o que explica por que muitos serviços vêm com scripts SysVinit, mesmo que os arquivos de configuração do Upstart sejam os preferidos. De fato, os scripts SysVinit são processados ​​por uma camada de compatibilidade no Upstart.

.dem nomes de diretório normalmente indica um diretório contendo muitos arquivos de configuração ou scripts para uma situação particular (por exemplo, /etc/apt/sources.list.dcontém arquivos que são concatenadas para fazer um virtual sources.list; /etc/network/if-up.dcontém scripts que são executados quando uma rede i nter f ace é ativado). Essa estrutura geralmente é usada quando cada entrada no diretório é fornecida por uma fonte diferente, para que cada pacote possa depositar seu próprio plug-in sem precisar analisar um único arquivo de configuração para fazer referência a si próprio. Nesse caso, acontece que “init” é um nome lógico para o diretório, o SysVinit foi o primeiro a ser usado init.de o Upstart usado sem formatação.initpara um diretório com um objetivo semelhante (teria sido mais "mainstream" e talvez menos arrogante, se eles tivessem usado /etc/upstart.d).

¹ sem contar initrd

Gilles
fonte
28
nota histórica esotérica: os .ddiretórios inseridos com o Sistema V. Era uma notação intrigante e, finalmente, provavelmente a idéia de uma pessoa que entrou na base de código e não pôde sair. Por exemplo, se você acha que esse caté um nome ruim para a tarefa que ele executa, imagine quantos arquivos em todo o sistema você precisaria tocar para alterá-lo.
quer
Nos sistemas que possuem os dois diretórios, qual Upstart e SysVinit é usado? Existe uma maneira de verificar?
asheeshr
3
@AsheeshR Verifique se existe um pacote chamado upstartor sysvinit. E nas versões recentes, também poderia ser systemd(o que não existia no Ubuntu quando escrevi minha resposta). É o pacote que fornece /sbin/init( dpkg -S /sbin/init).
Gilles
Na instância do AWS Ubuntu que estou usando (do Bitnami), é o upstartpacote que fornece / sbin / init (executado dpkg -S /sbin/init). Mas o Bitnami colocou seu script no diretório /etc/init.d. Isso não é conflitante com sua resposta para @AsheeshR acima? Obrigado.
Sabuncu
@Sabuncu Este é um exemplo de "SysVinit scripts são processados ​​por uma camada de compatibilidade no Upstart".
Gilles
29

O ".d" geralmente é anexado a um nome de diretório para indicar que o que costumava ser (ou o que poderia ter sido) tratado por um único script ou um único arquivo de configuração foi dividido em vários arquivos por conveniência, mas que devem ser incluídos ou executados juntos.

Por exemplo, /etc/apache/conf.d/ou/etc/apt/sources.d/

Nos casos em que é importante em que ordem eles devem ser incluídos / executados, os arquivos nesses diretórios algumas vezes começam com um número, como "00-default" ou "80-user", para que sejam executados na ordem correta.

No caso /etc/init.d/, indica que os scripts em "init.d" devem ser executados. Atualmente, no entanto, o sistema init dos sistemas operacionais modernos está um pouco mais envolvido que isso, mas o nome do diretório ainda está lá.

thomasrutter
fonte
Talvez os .dmeios estejam relacionados a um processo 'deamon' que normalmente é iniciado no momento da inicialização.
21
.d é definitivamente para diretório, não para daemon.
Martin Martin
13

Como você aponta, a nomenclatura ".d" é intrigante e estranha, e realmente não tem lugar em nenhum sistema moderno - você notará que a maioria dos serviços modernos tendem a abandoná-la.

A razão pela qual o diretório é /etc/inite não /etc/upstarté porque Upstart é o nome do projeto, o binário instalado real ainda é, /sbin/initportanto, não faria sentido para sua configuração ter um nome que não correspondesse ao binário.

Scott
fonte
7
Isso é errado, ver por exemplo udev do rules.d, do Xorg relativamente recente xorg.conf.d, não muito velha /etc/profile.detc ..
Ruslan