Service generique
| Fiche express | |
|---|---|
| Domaine | Squelette minimal de script d'init SysV |
| Emplacement | /etc/init.d/<nom>
|
| Enregistrement | Chkconfig |
| Version plus complète | Service complet |
| Voir aussi | Init · Chkconfig · Systemctl |
Service générique est le canevas minimal d'un script d'init SysV : juste les quatre actions attendues (start/stop/restart/status) et la ligne chkconfig d'en-tête, sans aucune implémentation — un point de départ à copier-coller avant de remplir les fonctions, plutôt qu'un script directement utilisable. Pour un script déjà complet avec une vraie implémentation (fonctions daemon/killproc de la bibliothèque système), voir Service complet.
Squelette
#!/bin/sh
# Startup Script
#
# chkconfig: 345 91 10
# description: mon_service
# Version: 1.0
## Variables
APPLI_NAME=mon_service
DIR_NAME=/opt/mon_service
## Fonctions
start() {
echo -n "Starting ${APPLI_NAME}"
# commande de démarrage réelle ici
}
stop() {
echo -n "Stopping ${APPLI_NAME}"
# commande d'arrêt réelle ici
}
status() {
# test réel de l'état ici
:
}
# Traitement de l'argument
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
status
;;
*)
echo "Usage: ${APPLI_NAME} {start|stop|restart|status}"
exit 1
;;
esac
Bug corrigé
Le script d'origine avait une fonction status() au corps vide (status(){ }), sans même un : (commande neutre POSIX). C'est accepté par Bash mais pas garanti sur un /bin/sh strict — sur Debian/Ubuntu, /bin/sh pointe vers dash, qui refuse une fonction sans au moins une commande à l'intérieur (erreur de syntaxe au chargement du script). Comme le shebang de ce squelette est #!/bin/sh, une fonction vide y est un piège de portabilité réel, pas juste théorique — d'où le : ajouté dans status() ci-dessus en attendant l'implémentation réelle.
Autre correction : le cas *) de l'original se terminait par exit 0 (usage invalide considéré comme un succès) — changé en exit 1, plus correct pour un script qui n'a pas fait ce qui était demandé.
Voir aussi
- Service complet — même squelette, entièrement implémenté avec les fonctions de la bibliothèque système (
daemon,killproc) - Service generique3 — variante pour une application lancée via un utilisateur dédié (
su - user -c startup.sh), sans bibliothèque système - Init — séquence de démarrage SysV, runlevels
- Chkconfig — enregistrement du service auprès des runlevels