Service generique

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
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