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.