Introduction
La présente documentation a pour objectif de présenter l’architecture sous Linux permettant de démarrer automatiquement des daemons.
Niveaux de démarrage de Linux Mandrake 8
Niveaux sous Linux
Plusieurs niveaux sont définis sous Linux : ces derniers vont de 0 à 6, les niveaux principaux sont donnés ci-dessous :
Niveau | Description |
---|---|
0 | Arrêt du système |
1 | Démarrage en mode autonome (cas extrême) |
3 | Démarrage multi utilisateurs / réseau |
5 | Comme le niveau 3 mais en mode graphique |
6 | Redémarrage du système |
Scripts des services et daemons
Les scripts de démarrage des services et daemons sont localisés dans le
répertoire /etc/rc.d/init.d
. Chaque fichier dans ce répertoire (exceptés
quelques fichiers particuliers comme notamment les fichiers functions et local)
déclenche le démarrage, l’arrêt, le statut et le redémarrage d’un service ou
d’un daemon en fonction du paramètre donné à ce fichier.
Le paramètre donné au fichier doit impérativement prendre 4 valeurs possibles :
start
stop
restart
status
Ce paramètre est analysé dans le script par une instruction case classique :
# !/bin/sh
. /etc/rc.d/init.d/functions # Script de fonctions usuelles
case "$1"
start)
... ;;
stop)
... ;;
restart)
... ;;
status)
... ::
*)
echo "Utilisation : start | stop | restart | status"
exit 1 ;;
esac ...
exit 0
Dans la section stop
de ces fichiers, il est généralement fait appel à la
fonction killproc
encapsulé dans le fichier functions dans ce même répertoire.
Cette dernière fonction accepte un paramètre qui est le nom du process à
arrêter :
Exemple :
stop)
killproc dataserver ;;
La fonction killproc
tente d’arrêter normalement le process (kill -15
), si
cette tentative échoue un arrêt violent du process est déclenché (kill -9
).
Manipulations des scripts des services et daemons selon les niveaux de Linux (arrêt, démarrage, redémarrage, etc.)
A chaque niveau (x) de Linux est associé un répertoire /etc/rc.d/rc(x).d
Exemple : pour le niveau 5, on a le répertoire /etc/rc.d/rc5.d
.
Dans les répertoires des niveaux sont placés des liens symboliques vers les
scripts du répertoire /etc/rc.d/init.d
selon les actions désirées en fonction
de chaque niveau. Lorsqu’un niveau est déclenché par le noyau Linux, tous les
liens symboliques du répertoire propre au niveau sont déclenchés
Ces liens symboliques doivent avoir une nomenclature particulière. Pour le
démarrage d’un service ou daemon, le lien devra commencer par S
. Pour l’arrêt,
le lien devra commencer par K
.
Exemple pour le niveau 5:
répertoire /etc/rc.d/rc5.d
> S86httpd (-> ../init.d/httpd)
> S87mysql ( -> ../init.d/mysql)
Au déclenchement du niveau 5 (démarrage de Linux en mode graphique) par le
noyau, le répertoire /etc/rc.d/rc5.d
est scanné et tous les liens symboliques
sont déclenchés. Lors du déclenchement de S86httpd
, le noyau déclenche le
script apache
dans le répertoire /etc/rc.d/init.d
avec pour paramètre l’option
start
(nomenclature S
).
Exemple pour le niveau 0 :
répertoire /etc/rc.d/rc0.d
> K01httpd (-> ../init.d/httpd)
Au déclenchement du niveau 0 (arrêt du système) par le noyau, le répertoire
/etc/rc.d/rc.d0
est scanné et tous les liens symboliques sont déclenchés. Lors
du déclenchement de K01httpd
, le noyau déclenche le script apache
dans le
répertoire /etc/rc.d/init.d
avec pour paramètre l’option stop
(nomenclature
K
).
Le noyau opère de la manière suivante lors du scan des liens symboliques :
- déclenchement de tous les liens
Kxx
par ordre croissant - déclenchement de tous les liens
Sxx
par ordre croissant
lorsque deux liens symboliques possèdent la même numérotation (exemple :
K01a
et K01b
), dans ce cas là l’ordre alphabétique prévaut.
Mise en route automatique du process httpd
Dans la suite de cette documentation, le sigle $APACHE
désignera le
répertoire d’installation d’Apache (soit /opt/apache
).
Étape préliminaire
Afin d’éviter un démarrage du process httpd
avec le user nobody (ce qui
entraîne des accès refusés du serveur Apache pour la consultation de certaines
pages Web), le fichier httpd.conf
a été modifié en conséquence. Ce dernier est
situé dans le répertoire $APACHE/conf
.
L’indication de l’utilisateur apache comme propriétaire des process httpd
a
été indiqué dans le fichier httpd.conf
. Initialement, l’utilisateur était
nobody.
$APACHE_CONF/conf/httpd.conf
# User=nobody
# Group=nobody
User=apache
Group=apache
Création d’un fichier service pour Apache
Un fichier service pour Apache a été créé dans le répertoire
/etc/rc.d/init.d
. Ce dernier a été nommé httpd
et le propriétaire est root.
Tous les utilisateurs ont un droit d’exécution sur ce fichier (chmod a+x httpd
).
Utilisation du fichier apache
:
Pour démarrer le service apache : . httpd start
Pour stopper le service apache : . httpd stop
Pour redémarrer le service apache : . httpd restart
Le script de ce fichier en shell est donné ci-dessous :
#!/bin/sh
########################################################################
# Fichier Service pour Apache #
# Date : 04.2002 #
# #
# Ce script verifie l’existence d’Apache et démarre le serveur Apache #
########################################################################
# Chkconfig :
# Ajout des librairies de fonctions
. /etc/rc.d/init.d/functions
export APACHE="/opt/apache"
if [ -d "$APACHE" ]
then
case "$1" in
start)
echo "Demarrage du serveur Apache..."
cd $APACHE
. ./bin/apachectl start
;;
stop)
killproc httpd
;;
restart)
echo "Redemarrage du serveur Apache..."
cd $APACHE
. ./bin/apachectl restart
;;
*)
echo "*** Utilisation : start, stop, restart"
exit 1
;;
esac
fi
exit 0
Mise en place du démarrage automatique d’Apache
Le démarrage automatique d’Apache n’a été rendu disponible que pour le
niveau 5 de Linux (démarrage en mode graphique). Pour cela le lien symbolique
de démarrage et nommé S86httpd
a été créé dans le répertoire :
/etc/rc.d/rc5.d
Ce dernier lien symbolique pointe vers le fichier service httpd
dans le
répertoire /etc/rc.d/init.d
et évoqué dans le paragraphe précédent.
Script de création :
cd /etc/rc.d/rc5.d
ln -s ../init.d/httpd S86httpd
Résultat :
S86httpd -> ../init.d/httpd
Mise en route automatique du process mysqld
Dans la suite de cette documentation, la variable $MYSQL
désignera le
répertoire d’installation de MySQL (soit /opt/mysql
).
Création d’un fichier service pour MySQL
Un fichier service pour MySQL a été créé dans le répertoire
/etc/rc.d/init.d
. Ce dernier a été nommé mysql
et le propriétaire est root.
Tous les utilisateurs ont un droit d’exécution sur ce fichier (chmod a+x
mysql
).
Utilisation du fichier
mysql
:
Pour démarrer le service mysqld : . mysql start
Pour stopper le service mysqld : . mysql stop
Pour connaître le statut de mysqld : . mysql status
Le script de ce fichier en shell est donné ci-dessous :
#!/bin/sh
########################################################################
# Fichier Service pour Mysql #
# Date : 04.2002 #
# #
# Ce script verifie l’existence de MySQL et démarre le serveur MySQL #
########################################################################
# Chkconfig :
# Ajout des librairies de fonctions
. /etc/rc.d/init.d/functions
export MYSQL="/opt/mysql"
if [ -d "$MYSQL" ]
then
case "$1" in
start)
echo "Demarrage du serveur MySQL..."
cd $MYSQL
./bin/safe_mysqld &
;;
stop)
killproc mysqld
;;
status)
echo "Etat de MySQL..."
cd $MYSQL
./bin/mysqladmin -uroot status
;;
*)
echo "*** Utilisation : start, stop, status"
exit 1
;;
esac
fi
exit 0
Mise en place du démarrage automatique de MySQL
Le démarrage automatique de MySQL n’a été rendu disponible que pour le
niveau 5 de Linux (démarrage en mode graphique). Pour cela le lien symbolique
de démarrage et nommé S87mysql
a été créé dans le répertoire :
/etc/rc.d/rc5.d
Ce dernier lien symbolique pointe vers le fichier service mysql
dans le
répertoire /etc/rc.d/init.d
et évoqué dans le paragraphe précédent.
Script de création :
cd /etc/rc.d/rc5.d
ln -s ../init.d/mysql S87mysql
Résultat :
S87mysql -> ../init.d/mysql