Quelle est la différence entre / etc / init / et /etc/init.d/?

230

Et quelle est la différence entre /etc/init/et /etc/init.d/?

Plus généralement, quelle est la signification du .dsuffixe dans un répertoire?

Olivier Lalonde
la source

Réponses:

229

/etc/init.dcontient les scripts utilisés par les outils d'initialisation System V (SysVinit). Il s'agit du package de gestion de services traditionnel pour Linux, contenant le initprogramme (le premier processus exécuté lorsque le noyau a fini de s'initialiser¹), ainsi que d'une infrastructure permettant de démarrer et d'arrêter des services et de les configurer. Plus précisément, les fichiers /etc/init.dsont des scripts shell qui répondent à start, stop, restartet (lorsque pris en charge) des reloadcommandes pour gérer un service particulier. Ces scripts peuvent être appelés directement ou (le plus souvent) via un autre déclencheur (généralement la présence d'un lien symbolique dans /etc/rc?.d/).

/etc/initcontient les fichiers de configuration utilisés par Upstart. Upstart est un nouveau progiciel de gestion de services défendu par Ubuntu. Les fichiers dans /etc/initdes fichiers de configuration disant Upstart comment et quand start, stop, reloadla configuration, ou interroger le statusd'un service. À partir de lucid, Ubuntu est en train de passer de SysVinit à Upstart, ce qui explique pourquoi de nombreux services sont livrés avec des scripts SysVinit même si les fichiers de configuration Upstart sont préférés. En fait, les scripts SysVinit sont traités par une couche de compatibilité dans Upstart.

.ddans les noms de répertoire indique généralement un répertoire contenant plusieurs fichiers de configuration ou des scripts pour une situation particulière (par exemple , /etc/apt/sources.list.dcontient des fichiers qui sont concaténées pour faire un virtuel sources.list, /etc/network/if-up.dcontient des scripts qui sont exécutés lorsqu'un réseau i nter f ace est activé). Cette structure est généralement utilisée lorsque chaque entrée du répertoire est fournie par une source différente, afin que chaque package puisse déposer son propre plug-in sans avoir à analyser un seul fichier de configuration pour se référencer lui-même. Dans ce cas, il se trouve que “init” est un nom logique pour le répertoire, que SysVinit est arrivé en premier et utilisé init.d, et que Upstart a été utilisé simplement.initpour un répertoire avec un but similaire (il aurait été plus «traditionnel», et peut-être moins arrogant, s'ils l'avaient utilisé à la /etc/upstart.dplace).

¹ sans compter initrd

Gilles
la source
28
note historique ésotérique: les .drépertoires entrés avec System V. C'était une notation déroutante à l'époque, et finalement probablement l'idée d'une personne qui est entrée dans la base de code et ne pouvait pas partir. Par exemple, si vous pensez que catc'est un mauvais nom pour la tâche à accomplir, imaginez combien de fichiers du système vous devez toucher pour les modifier.
msw
Sur les systèmes qui ont les deux répertoires, lequel d’Uststart et de SysVinit est utilisé? Y-a-t-il un moyen de vérifier?
Asheeshr
3
@ AsheeshR Vérifiez s'il existe un package appelé upstartou sysvinit. Et dans les versions récentes, cela pourrait être systemdaussi bien (ce qui n'existait pas pour Ubuntu à l'époque où j'ai écrit ma réponse). C'est le paquet qui fournit /sbin/init( dpkg -S /sbin/init).
Gilles
Sur l'instance AWS Ubuntu que j'utilise (de Bitnami), c'est le upstartpackage qui fournit / sbin / init (run dpkg -S /sbin/init). Mais Bitnami a placé son script dans le répertoire /etc/init.d. Cela n’est-il pas contradictoire avec votre réponse à @AsheeshR ci-dessus? Je vous remercie.
Sabuncu
@Sabuncu Ceci est un exemple de «Les scripts SysVinit sont traités par une couche de compatibilité dans Upstart».
Gilles
29

Le ".d" est généralement ajouté à un nom de répertoire pour indiquer que ce qui était (ou aurait pu être) traité par un seul script ou un seul fichier de configuration a été scindé en plusieurs fichiers pour des raisons de commodité. doivent être inclus ou exécutés ensemble.

Par exemple, /etc/apache/conf.d/ou/etc/apt/sources.d/

Dans les cas où il est important de savoir dans quel ordre ils doivent être inclus / exécutés, les fichiers de ces répertoires commencent parfois par un numéro, comme "00-default" ou "80-user", afin de s'exécuter dans le bon ordre.

Dans le cas /etc/init.d/contraire, cela signifie que les scripts de "init.d" doivent tous être exécutés. De nos jours, cependant, le système init des systèmes d'exploitation modernes est un peu plus compliqué que cela, mais le nom du répertoire est toujours là.

thomasrutter
la source
Peut-être que le .dmoyen utilisé est lié à un processus de «démon» qui est normalement démarré au démarrage.
21
.d est définitivement pour le répertoire, pas le démon.
Martin
13

Comme vous l'avez fait remarquer, la nomenclature ".d" est déroutante et étrange et n'a pas sa place dans aucun système moderne - vous remarquerez que la plupart des services modernes ont tendance à la laisser tomber.

La raison pour laquelle le répertoire est /etc/initet n'est pas /etc/upstartparce qu'Uststart est le nom du projet, le binaire réellement installé est /sbin/initdonc il ne serait pas logique que sa configuration ait un nom qui ne correspond pas au binaire.

Scott
la source
7
C'est faux, voir par exemple udev's rules.d, Xorg's relativement récent xorg.conf.d, pas trop vieux, /etc/profile.detc.
Ruslan