Création d’un script de démarrage sous Linux

Date: 17/03/2009 | Catégories: Open-source,Systeme | Tags: ,,,,,

Dans cet article nous allons voir comment automatiser le démarrage d'un service ainsi que son arrêt sur un système GNU/Linux (plus particulièrement sur une distribution Ubuntu 8.04 Server).

A titre d'exemple, nous allons voir comment lancer un portail Liferay au démarrage de la machine, et comment l'arrêter proprement lors d'un reboot ou d'un shutdown.

Création du script

Nous allons donc créer un script nommé 'liferay' que l'on va placer dans le répertoire /etc/init.d .

#!/bin/sh

# le nom du service
SERVICE_NAME=Liferay
# le répertoire où se trouvent les exécutables du service
SERVICE_DIRECTORY=/opt/Portal/bin
# le nom du script de démarrage du service
SERVICE_STARTUP_SCRIPT=startup.sh
# le nom du script d'arrêt du service
SERVICE_SHUTDOWN_SCRIPT=shutdown.sh

usage()
{
        echo "-----------------------"
        echo "Usage: $0 (stop|start|restart)"
        echo "-----------------------"
}

if [ -z $1 ]; then
        usage
fi

service_start()
{
        echo "Starting service '${SERVICE_NAME}'..."
        OWD=`pwd`
        cd ${SERVICE_DIRECTORY} && ./${SERVICE_STARTUP_SCRIPT}
        cd $OWD
        echo "Service '${SERVICE_NAME}' started successfully"
}

service_stop()
{
        echo "Stopping service '${SERVICE_NAME}'..."
        OWD=`pwd`
        cd ${SERVICE_DIRECTORY} && ./${SERVICE_SHUTDOWN_SCRIPT}
        cd $OWD
        echo "Service '${SERVICE_NAME}' stopped"
}

case $1 in
        stop)
                service_stop
        ;;
        start)
                service_start
        ;;
        restart)
                service_stop
                service_start
        ;;
        *)
                usage
esac
exit 0

Maintenant, il faut donner les permissions d'exécution sur ce script

# chmod a+x /etc/init.d/liferay

Automatisation

Maintenant que le script est créé, il ne reste plus qu'à faire en sorte que le service se lance au démarrage de la machine et qu'il se stoppe à l'arrêt de celle-ci. Le runlevel qui nous intéresse ici est le numéro 2, mais on peut appliquer cette configuration pour les autres.

Il existe 2 méthodes pour procéder: la première consiste à créer des liens symboliques à la main dans le répertoire /etc/rc2.d en respectant les conventions de nommage, et la seconde (plus simple), consiste à utiliser la commande update-rc.d (c'est cette méthode que nous allons utiliser).

Avant tout chose, il faut déterminer le moment exact où le script s'exécutera:

  • Démarrage du service
    Le service liferay doit se lancer une fois que le serveur de base de données est démarré (en l'occurrence, il s'agit de MySQL).
    En regardant dans le répertoire /etc/rc2.d, on voit que le service mysql démarre à la position 19 (ce numéro peut changer suivant les configurations), donc nous allons démarrer le service liferay à la position 20.
  • Arrêt du service
    Le service liferay doit s'arrêter avant que le serveur de base de données ne s'arrête.
    En regardant dans le répertoire /etc/rc6.d (le runlevel 6 est consacré à l'arrêt de la machine), on voit que le service mysql s'arrête en position 18. Nous allons donc arrêter le service liferay en position 17.

Voici donc la commande qui permet de configurer le service comme décrit précédemment:

# update-rc.d liferay start 20 2 . stop 17 6 .

Désactiver un service

Pour désactiver le lancement automatique d'un service au démarrage, il existe 3 possibilités:

  • utiliser la commande update-rc.d
    # update-rc.d -f liferay remove
  • supprimer le lien symbolique du répertoire /etc/rcX.d (où X représente le numéro de runlevel désiré)
  • retirer les permissions d'exécution sur le script situé dans le répertoire /etc/init.d

Pour plus d'infos, consulter la documentation de la commande update-rc.d.

Partager ce billet