Table des matières

Exécuter des scripts au démarrage

Il peut être utile de rajouter des scripts perso au démarrage du serveur, par exemple pour définir les règles de filtrage iptables, nettoyage de logs, etc…

Pour cela il va falloir créer votre script dans le dossier /etc/init.d

Par exemple, on va créer le script daemon.sh :

sudo vi /etc/init.d/daemon.sh

Dans le fichier, ici un script bash, on déclare si nécessaire le shebang à la première ligne :

#!/bin/bash

Dépendances

Déclarer les dépendances permet à Debian de définir l'ordre dans la séquence de démarrage pour démarrer le script.

En documentant les dépendances dans les scripts d'init.d, il devient possible de vérifier l'ordre de démarrage courant, de changer cet ordre et d'exécuter des scripts en parallèle pour accélérer le processus de démarrage.

Pour notre exemple, on va maintenant ajouter ces dépendances en ajoutant le bloc suivant dans le script :

### BEGIN INIT INFO
# Provides:          daemon
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO

Paramètres

ProvidesEn général le nom du script, cela permet d'identifier le script dans la séquence de boot
Required-StartPermet d'indiquer les fonctions qui doivent être disponibles pour démarrer le script (voir liste des fonctions virtuelles ci dessous
Required-StopPermet d'indiquer les fonctions utilisées par le script, ces fonctions seront stoppées avant de stopper le script. En général on retrouve les mêmes valeurs que Required-Start
Should-StartPermet de définir les fonctions à lancer avant de lancer le script
Should-StopPermet de définir les fonctions à stopper après la fin de l'exécution du script
Default-StartDéfini les niveaux de démarrage du script
Default-StopIdem, mais pour les niveaux d'arrêt
Short-DescriptionDescription simple du script sur une ligne
DescriptionDescription avancée, peut être multi-ligne en ajoutant # suivi d'une tabulation ou deux espaces devant chaque ligne

Niveaux d'exécution

0halt
1single user mode
2multiuser with no network services exported
3normal/full multiuser
4reserved for local use, default is normal/full multiuser
5multiuser with a display manager or equivalent
6reboot

Fonctions virtuelles

$localfs|Tous les systèmes de fichiers sont montés. Tous les scripts qui écrivent dans /var/ doivent dépendre de cette valeur, sans quoi il doivent aussi dépendre de $remotefs
$networkLe réseau de bas niveau (carte réseau, doit comprendre cartes PCMCIA) est lancé
$namedService de résolution de nom (DNS) présent et exécuté
$portmapLes services fournissant le mapping de port SunRPC/ONCRPC sont lancés
$remotefs|Tous les systèmes de fichiers sont montés. Dans certains systèmes les dossiers comme /usr sont distants. Si le script nécessite d'avoir monté /usr/, il doit dépendre de $remotefs. Les scripts dépendant de $remotefs n'ont pas besoin de dépendre de $localfs.
$syslogLe système de log est opérationnel
$time L'horloge système est définie, utile pour les scripts devant utiliser ntp par exemple
$all Fonction pour démarrer un script après tous les autres scripts à la fin de la séquence de démarrage. Cela fonctionne que pour l'ordre de démarrage, pas l'ordre d'arrêt. Il n'est pas possible de dépendre d'un script qui dépend de $all

La liste complète des paramètres est disponible sur le wiki officiel de Debian

Ajout à la liste de démarrage

Pour finir il faut tout d'abord rendre le script exécutable :

sudo chmod +x /etc/init.d/daemon.sh

On va maintenant déclarer le script dans la séquence de démarrage :

Sous Lenny :

sudo update-rc.d daemon defaults

Sous Squeeze (et au delà) :

sudo insserv daemon

Retirer de la liste de démarrage

Rien de plus simple :

Sous Lenny :

sudo update-rc.d daemon remove

Sous Squeeze (et au delà) :

sudo insserv -r daemon