Automatiser le lancement d'un processus lors du démarrage de Cent OS

Cas du service Tomcat : conteneur léger de servlets

Gaël YIMEN YIMGA

Ce tutoriel présente de façon succincte, une méthode pour démarrer un programme ou un script au lancement du système d'exploitation Linux. Nous avons souvent besoin de cette astuce pour éviter des redémarrages multiples de services et autres programmes. Il est surtout destiné aux développeurs, aux administrateurs système et à toute personne ayant un souci de culture générale.

Commentez

- Titre : Automatiser le lancement d'un processus lors du démarrage de Cent OS

- Auteur : Gaël YIMEN YIMGA

- Parution : 16 novembre 2013

- Mise à jour : 25 novembre 2013

- Licence : Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Gaël YIMEN YIMGA. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Introduction

- II. Prérequis

- III. Installation et configuration de Tomcat sur CentOS

- IV. Automatiser le lancement de Tomcat

- V. Remerciements

I - Introduction

Après avoir souvent écrit des programmes, des scripts Shell et/ou batch, et parfois des daemons, on souhaite souvent qu'ils se lancent au démarrage du système d'exploitation. Plusieurs raisons peuvent entrainer ce choix : automatisation de certains traitements, configurations particulières, paramétrages de certains services. Toutefois, cette tâche ne se trouve pas souvent très évidente.

Dans notre document, nous allons étudier un cas très précis et clair, familier aux développeurs Java. Il s'agit de lancer le service Tomcat au démarrage du système d'exploitation communautaire CentOS. Même si l'exemple est précis, en comprenant le procédé, vous pourrez le reproduire pour lancer le service que vous souhaitez et cela, sur tous les systèmes d'exploitation Linux respectant la norme POSIX.

II - Prérequis

Vous devez télécharger une archive (.tar.gz) du logiciel Tomcat. Ici, nous avons travaillé avec la version 7.0.37. Vous trouverez celle sur le site d'Apache (http://tomcat.apache.org/download-70.cgi). Le système d'exploitation CentOS doit déjà être installé et démarré.

III - Installation et configuration de Tomcat sur CentOS

Il faut dans un premier temps créer un nouvel utilisateur « tomcat » qui nous permettra de lancer notre service, afin de ne pas le faire avec l'utilisateur root permettant ainsi d'éviter des malencontreuses manipulations. La commande suivante permet de créer cet utilisateur :

useradd tomcat

et ensuite suivre les consignes qui arriveront.

La création de l'utilisateur tomcat étant faite, il faut maintenant copier l'archive de Tomcat (apache-tomcat-7.0.37.tar.gz dans notre cas) dans le répertoire de travail de l'utilisateur tomcat (ici /home/tomcat).

Décompressez ensuite l'archive précédemment copiée grâce aux commandes gunzip ou tar xzf dans le répertoire /home/tomcat puis, supprimez l'archive pour récupérer l'espace disque. Les commandes prévues à cet effet sont les suivantes :

tar xzf apache-tomcat-7.0.37.tar.gz
rm -Rf apache-tomcat-7.0.37.tar.gz

Mettez à jour la variable d'environnement PATH afin que le lancement du service Tomcat puisse être possible à partir de n'importe quel répertoire. Les commandes suivantes pourront vous aider :

PATH=$PATH:/home/tomcat/apache-tomcat-7.0.37
export PATH

Il faut maintenant créer l'utilisateur administrateur du service Tomcat. Cela se fait à travers un fichier XML de configuration : tomcat-users.xml

Éditez le fichier tomcat-users.xml qui se trouve dans le répertoire /home/tomcat/apache-tomcat-7.0.37/conf, décommentez la section <tomcat-users>, ajoutez dans cette section la ligne

<user username="admin" password="admin" roles="manager-gui" />.

Vous venez de terminer l'installation de Tomcat. Pour tester si l'installation s'est bien effectuée, il suffit de taper la commande startup.sh

La commande shutdown.sh permet d'arrêter. Il faut maintenant automatiser son lancement, nous n'allons pas le faire tout le temps à la main, cela serait fastidieux.

IV - Automatiser le lancement de Tomcat

Expliquons le principe. Pour lancer automatiquement un processus au démarrage de Linux, plusieurs étapes doivent être prises en compte.

Au départ, on crée un fichier qui doit contenir les spécifications décrivant le comportement des scripts suivant les évènements qui arriveront (démarrage du système, arrêt du système, redémarrage du système, demande du statut du processus, rechargement du processus). Pour chacun de ces évènements-là, il faut pouvoir dire comment le programme à lancer doit se comporter. Il faut noter que ce fichier doit se retrouver dans le répertoire /etc/init.d.

Par ailleurs, les systèmes Linux possédant la notion de niveau d'exécution qui varient de 0 à 6 qui signifie :

- 0 : arrêt du système ;

- 1 : mode mono-utilisateur pour administration système ;

- 2 : mode multi-utilisateur, sans réseau ;

- 3 : mode multi-utilisateur, avec réseau ;

- 4 : mode inutilisé ;

- 5 : mode multi-utilisateur avec xwindows ;

- 6 : redémarrage du système.

Il faut pouvoir dire pour le processus qui se lance au démarrage, à quel niveau d'exécution il est mis en marche et à quel niveau il doit être en arrêt.

Ces deux étapes sont fondamentales pour normaliser encore notre script. On dit que le script est compatible POSIX et pourra fonctionner sous un Linux compatible Unix SYSTEM V. De nombreux livres vous permettront de mieux comprendre ces notions. Passons à un exemple.

Créer un fichier qui s'appelle tomcatd (pour tomcat daemon, noter que c'est juste un nom arbitraire). Dans ce fichier il faut saisir le script suivant :

#!/bin/bash
#
#   /etc/init.d/tomcatd
#
# chkconfig: 2345 20 80
# description: this script is designed to
# launch tomcat at the starting point of
# CentOS

# Source function library
. /etc/init.d/functions

TOMCAT_HOME=/home/tomcat/apache-tomcat-7.0.37/bin
START_TOMCAT=/home/tomcat/apache-tomcat-7.0.37/bin/startup.sh
STOP_TOMCAT=/home/tomcat/apache-tomcat-7.0.37/bin/shutdown.sh
PROG="tomcat"

start(){
echo -n "Starting $PROG: "
cd $TOMCAT_HOME
su - tomcat -c ${START_TOMCAT}
echo "done."
}

stop(){
echo -n "Shutting down $PROG: "
cd $TOMCAT_HOME
su - tomcat -c ${STOP_TOMCAT}
echo "done."
}

restart(){
#We need to know first if the service is on
stop
sleep 10
start
}

reload(){
restart
}

case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
reload)
reload
;;
*)
echo "Usage : $0 {start|stop|restart|reload}"
esac

exit 0

Expliquons le rôle des instructions que nous avons utilisées dans le script précédent.

. /etc/init.d/functions

Cette instruction permet de faire appel à des fonctions du système CentOS si jamais notre script en fait usage.

TOMCAT_HOME=/home/tomcat/apache-tomcat-7.0.37/bin
START_TOMCAT=/home/tomcat/apache-tomcat-7.0.37/bin/startup.sh
STOP_TOMCAT=/home/tomcat/apache-tomcat-7.0.37/bin/shutdown.sh
PROG="tomcat"

Les variables que nous avons utilisées dans notre script.

start(){
echo -n "Starting $PROG: "
cd $TOMCAT_HOME
su - tomcat -c ${START_TOMCAT}
echo "done."
}

Ceci représente le bloc d'instructions qui s'exécutent lorsque le système CentOS démarre initialement. Pour les autres blocs, c'est pareil sauf que c'est pour l'arrêt du système et le redémarrage.

su - tomcat -c ${START_TOMCAT}

Cette instruction permet à l'utilisateur tomcat d'exécuter ce processus de lancement de Tomcat en tant que utilisateur tomcat.

Après avoir édité son fichier tomcatd, il faut se connecter en tant que root pour l'enregistrer dans le répertoire /etc/init.d. C'est le répertoire où se trouvent tous les scripts qui se lancent au démarrage de CentOS.

Il faut maintenant signaler à CentOS que ce script doit se lancer au démarrage. Ceci est possible par la commande suivante :

chkconfig --add tomcatd

Ensuite, il faut définir les niveaux d'exécution dans lesquels le processus doit être en marche dans notre cas, nous avons choisi, les niveaux 2, 3, 4 et 5. La commande suivante illustre clairement cela.

chkconfig --level 2345 tomcatd on

Suite à ces deux instructions, vous pouvez vérifier que votre script marche correctement en tapant la commande suivante :

service tomcatd start

Le service devrait se lancer et vous devriez voir le message done à la fin.

Ainsi, redémarrez votre système CentOS, et lancez le lien suivant sur un navigateur http://localhost:8080/

La page suivante devrait s'afficher, preuve que votre conteneur de servlets se lance au démarrage du système : vous avez réussi.

V - Remerciements

Je remercie particulièrement  BlackStreet qui m'a apporté son support pour la résolution du problème qui m'a incité à la rédaction de cet article. Et sans oublier  LittleWhite, qui m'a beaucoup aidé dans la correction sémantique et syntaxique. Je ne manquerai pas de remercier infiniment  ClaudeLELOUP qui m'a aidé dans la relecture orthographique de cet article.