Services sous Linux - Démarrage et arrêt des serveurs Apache et MySQL


1-Introduction

La présente documentation a pour objectif de présenter l'architecture sous Linux permettant de démarrer automatiquement des daemons.

2- Niveaux de démarrage de Linux Mandrake 8

2-1- 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

2-2- 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 :

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).

2-3-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 :

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.

3- 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).

3-1- É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.

User=nobody   ->     User=apache
Group=nobody  ->     Group=apache

3-2- 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 de MySQL 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

3-3- 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

4- Mise en route automatique du process mysqld

Dans la suite de cette documentation, le sigle $MYSQL désignera le répertoire d'installation de MySQL (soit /opt/mysql).

4-1- 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

4-2- 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/rc.d5

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

Annexe

Historique

Version Date Commentaires
1.0 07/2002 Version initiale

Liens

MySQL Server and Server-Startup Programs
mysqladmin - Client for Administering a MySQL Server
Apache HTTP Server Project
Démarrage d'Apache
Arrêter, stopper et redémarrer Apache avec ApacheCtl