Création d’un script de démarrage sous Linux
Date: 17/03/2009 | Catégories: Open-source,Systeme | Tags: boot,démarrage,init,init.d,rc,script
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.