Automatiser le lancement d’un programme lors du démarrage de CentOS : Cas du conteneur de servlet TOMCAT.
Introduction
Après avoir souvent écrit des programmes, des scripts Shell et/ou batch, et parfois des démons. On souhaite souvent qu’ils se lancent au démarrage du système d’exploitation. Ceci pour de multiples raisons, automatisation de certains traitements, configurations particulières, paramétrages de certains autres programmes. Cette tâche ne se trouve pas souvent très évidentes.
Dans notre document, nous allons étudier un cas très précis et claire qui arrive souvent aux développeurs java. Il s’agit de lancer le service Tomcat au démarrage du système d’exploitation communautaire CentOS.
Prérequis
Vous devez avoir téléchargé une archive (.tar.gz) du logiciel Tomcat. Ici, nous avons travaillé avec la version 7.0.37. Vous y trouverez cela sur le site de Apache (http://tomcat.apache.org/download-70.cgi). Le système d’exploitation CentOS doit déjà être installé et démarré.
Installation et configuration de Tomcat sur CentOS
Il faut dans un premier temps créer un utilisateur Tomcat qui nous permettra de lancer notre service, question de ne pas le faire avec l’utilisateur root pour éviter des manipulations malencontreuses. On peut le faire via la commande :
useradd tomcat et ensuite suivre les consignes qui arriveront.
La création de l’utilisateur tomcat étant faite, il faut ensuite 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 copier grâce aux commande gunzip ou tar xzf dans le répertoire /home/tomcat et après la décompression supprimer 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
Mettre à 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 par configuration dans un fichier XML : tomcat-users.xml
Editer le fichier tomcat-users.xml qui se trouve dans le répertoire /home/tomcat/apache-tomcat-7.0.37/conf, décommenter la section , ajouter dans cette section la ligne
.
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 manuellement tout le temps.
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 de comment les scripts doit se comporter conformément aux évènements (démarrage du système, arrêt du système, redémarrage du système, demande du statut du processus, rechargement du processus) qui arriveront. 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 signifient :
– 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 SYSTEM V. De nombreux bouquins vous permettrons de mieux comprendre ces notions. Passons à un exemple pour nous plonger dans notre objectif.
Ces deux étapes sont fondamentales pour normaliser son script. On dit que ton script est compatible POSIX et pourra fonctionner sous un linux SYSTEM V. Vous pouvez mieux comprendre ces notions dans des bouquins mieux lotis à cet effet. Passons à l’exemple afin de mieux comprendre.
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
}
relaod(){
restart
}
case « $1″ in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
reload)
relaod
;;
*)
echo « Usage : $0 {start|stop|restart|reload} »
esac
exit 0
Expliquons le rôle des instructions que nous avons utilisé 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é 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 root.
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 ou se trouve 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
Après 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 lancer le lien suivant sur un navigateur http://localhost:8080/
La page suivante devrait s’afficher preuve que votre conteneur de servlet se lance au démarrage du système : Vous avez réussi.
Contacter l’auteur de cet article.
Sachant que toute œuvre humaine n’est pas parfaite, je suis ouvert aux critiques et suggestions en provenances de quiconque aura lu. Vous pouvez me contacter par mail aux adresses suivantes : yimengael@gmail.com ou sur ma page developpez.com, vous pouvez me laisser un message http://www.developpez.net/forums/u283190/yimson/