init.d
init(8)
).
Ces scripts sont référencés par des liens symboliques dans les
répertoires /etc/rc
n.d
. Quand on change le
niveau d'exécution, init recherche dans le répertoire
/etc/rc
n.d
le script à exécuter, où
n est le niveau d'exécution à atteindre.
Le nom des liens ont tous la forme S
mmscript
ou K
mmscript où mm correspond à 2 chiffres
et script est le nom du script (il doit être le même que le
nom du script réel dans /etc/init.d
). Quand init
change le niveau d'exécution, d'abord les cibles des liens dont les noms
commencent par K
sont exécutées, chacune avec un seul argument
stop
, suivi par les scripts préfixés par un S
, chacun
avec l'argument start
. Les liens K
sont responsables de
l'arrêt des services et les liens S
du démarrage des services
du nouveau niveau d'exécution.
Par exemple, si nous passons du niveau 2 au niveau 3, init
exécutera d'abord tous les scripts préfixés par K
qu'il trouve
dans /etc/rc3.d
et ensuite tous les scripts préfixés par
S
. Les liens commençant par K
amèneront le fichier
référencé à s'exécuter avec l'argument stop
, et les liens
S
avec un argument start
.
Les 2 chiffres mm sont utilisés pour décider dans quel ordre
démarrer et arrêter les choses. Les liens exécutent leurs scripts dans
un ordre croissant. Par exemple les scripts K20
seront exécutés
avant les scripts K30
. Cela est utilisé quand certains services
doivent démarrer avant d'autres. Par exemple, le serveur de nom
bind doit être démarré avant le serveur de news inn
afin qu'inn puisse positionner ses listes d'accès. Dans ce cas,
le script qui démarre bind doit avoir un plus petit numéro que
le script qui lance inn pour démarrer d'abord:
/etc/rc2.d/S17bind /etc/rc2.d/S70inn
init.d
/etc/init.d
pour démarrer ou arrêter les services au démarrage
ou pendant un changement de niveau d'exécution. Ces scripts doivent être
nommées /etc/init.d/
package, et ils doivent accepter
un argument: start
signifiant de démarrer le service, ou
stop
pour arrêter le service. Facultativement, ils peuvent
supporter l'argument reload
qui provoque le rechargement de la
configuration.
Les scripts doivent s'assurer qu'ils se comporteront judicieusement,
s'ils sont invoqués avec l'option start
quand le service est
déjà en action, ou stop
s'il ne l'est pas, et qu'ils ne tuent
pas fortuitement les process des utilisateurs.
La meilleure façon de réaliser cela est d'utiliser habituellement le programme start-stop-deamon.
Ces scripts ne doivent pas échouer de façon obscure quand les fichiers
de configuration persistent alors que le paquet a été enlevé, par défaut
dpkg laisse les fichiers de configuration dans le système après
que le paquet ait été enlevé. C'est seulement quand il est exécuté avec
l'option --purge
, que dpkg enlèvera les fichiers de
configuration. Cependant, tu dois inclure une instruction de test au
début du script:
test -f programme-exécuté-dans-le-script || exit 0
rc
n.d
- update-rc.d
/etc/rc
n.d
à partir de leurs scripts
postinst
et postrm
.
Tu dois utiliser ce script pour réaliser les changements dans
/etc/rc
n.d
et jamais inclure n'importe quels liens
symboliques /etc/rc
n.d
dans l'archive réel.
Par défaut, update-rc.d démarrera les services dans chacun des
niveaux d'état d'exécution multi-utilisateur (2, 3, 4, et 5) et les
arrêtent dans le niveau halt (0), niveau mono-utilisateur (1),
et le niveau reboot (6). L'administrateur système a
l'opportunité de personnaliser les niveaux d'exécution en ajoutant, en
déplaçant, ou en enlevant simplement les liens symboliques dans
/etc/rc
n.d
.
Pour obtenir le comportement par défaut de ton paquet, mets dans ton
script postinst
:
update-rc.d package default >/dev/nullet dans ton script
postrm
:
if [ purge = "$1" ]; then update-rc.d package remove >/dev/nul fiCeci utilisera un numéro de séquence par défaut à 20. Si on ne tient pas compte de quand ou dans quel ordre le script est exécuté, utilise le numéro par défaut. Sinon, tu dois demander un numéro au mainteneur du paquet sysvinit ou dans la mailing list
debian-devel
,
ils t'aideront à en choisir un.
Pour plus d'information sur l'utilisation d'update-rc.d,
consulte la page de manuel update-rc.d(8)
.
rc.boot
/etc/rc.boot
qui contient les
scripts qui sont exécutés une fois par démarrage. Ce dispositif est
fournie pour l'initialisation de matériels périphériques,
nettoyage de fichiers, et ainsi de suite.Par exemple, le paquet kbd fournit un script pour l'initialisation de la configuration clavier, la fonte et le mode de la console.
Les fichiers dans /etc/rc.boot
ne doivent pas être liés dans
/etc/init.d
. Ceux sont des scripts à part entière.
rc.boot
ne doit pas être utilisé pour démarrer des processus à
but général, et activités similaires. Ceci doit être fait en utilisant
la structure rc
n.d
, ci-dessus, afin que les
services puissent être démarrés et arrêtés proprement quand le niveau
d'exécution change ou quand la machine doit être éteinte ou rebootée.
/etc/rc
n.d/*
dans l'archive .deb
du
système de fichier! Cela amènera des problèmes! Tu dois les créer
avec update-rc.d, comme ci-dessus.
Ne pas include les liens symboliques de
/etc/rc
n.d/*
dans la liste de fichiers de configuration de dpkg! Cela
provoquera des erreurs! Il faut cependant inclure les scripts
/etc/init.d
dans les fichiers de configuration.
/etc/init.d
nommé bind.
Comme indiqué ci-dessous, le script interprète l'argument
reload
, pour envoyer le signal
HUP
au serveur de nom (provoquant le rechargement de sa
configuration). De cette façon, l'utilisateur peut taper
/etc/init.d/bind reload
pour recharger
la configuration du serveur de nom.
#!/bin/sh # Original version par Robert Leslie <rob@mars.org>, edited by iwj test -x /usr/sbin/named || exit 0 case "$1" in start) test- f /etc/named.boot -a -f /var/name/boot.options || exit 0 start-stop-deamon --start --verbose --exec /usr/sbin/named ;; stop) start-stop-deamon --stop --verbose \ --pidfile /var/run/named.pid --exec /usr/sbin/named ;; reload) start-stop-deamon --stop --signal 1 --verbose \ --pidfile /var/run/named.pid --exec /usr/sbin/named ;; *) echo "Usage: /etc/init.d/bin {start|stop|reload}" >&2 exit 1 ;; esac exit 0Un autre exemple, sur lequel les scripts de
/etc/init.d
peuvent
se baser, se trouve dans /etc/init.d/skeleton
.
Si ce paquet se contente de la configuration par défaut donné par
update-rc.d, c'est à dire un numéro d'ordre égal à 20 et
mise en oeuvre dans tous les niveaux d'exécution, il est possible d'écrire
dans le script postinst
:
update-rc.d bind default >/dev/nullEt dans son script
postrm
, la suppression du lien quand le paquet
est détruit:
if [ purge = "$1" ]; then update-rc.d acct remove >/dev/null fi