Lancer un script au boot du Raspberry Pi

Il arrive que lors de la création d’un serveur, on souhaite exécuter certains programmes dès le démarrage de l’OS. Voici comment faire sous Raspbian.

76c171b2-de28-f1d9-f84a-ff0c977d55d3

Lorsque vous installer un outil, généralement celui-ci va vous fournir le(s) script(s) pour être exécuté dès le démarrage de la machine. C’est le cas de Nginx, php-fpm, apache, mysql, etc.

Avant tout, le script

Mais si vous voulez faire un script vous même ou alors que l’outil est multi plateforme, ça se complique. Par exemple, si vous installez un serveur Minecraft (merci Pierre pour l’idée d’article 🙂 ).

Vous devez créer un fichier dans le répertoire /etc/init.d. Ce fichier XYZ aura comme contenu de base :

#!/bin/bash

# Apres cette ligne les commandes seront executees systematiquement

# ...

# Apres cette ligne les commandes executees en fonction du parametre passe en ligne de commande

case "$1" in

    start)

        # Commandes executees avec le parametre start (celui lors du boot)

        ;;

    stop)

        # Commandes executees avec le parametre stop (celui lors de l'arret du systeme)

        ;;

    reload|restart)

        $0 stop

        $0 start

        ;;

    *)

        echo "Usage: $0 start|stop|restart|reload"

        exit 1

esac

exit 0

N’oubliez pas de rendre le script exécutable avec la commande chmod :

chmod 755 /etc/init.d/XYZ

Vous pouvez ensuite tester votre script avec la commande service. Vous passez en paramètre l’argument que vous souhaitez. Par exemple pour démarrer votre service :

service XYZ start

Activer le script

Si ça fonctionne comme vous voulez, vous pouvez alors activer le lancement du script au démarrage du système avec la commande update-rc.d :

update-rc.d XYZ defaults

Cette commande ajoute le script dans la séquence de démarrage de votre Raspberry. Vous pouvez utiliser d’autres valeurs à la place de defaults :

  • remove : pour supprimer le script de la séquence de démarrage
  • disable : pour désactiver le script
  • enable : pour activer le script

D’autres paramètres permettent de régler la séquence de démarrage et les priorités du scripts en modifiant la configuration LSB (plus d’infos dans ce post).

Oui mais si je dois interagir avec mon service ?

Vous avez maintenant toutes les informations pour pouvoir créer vous même un service qui se lance au démarrage de votre Raspberry. Toutefois, il y a une situation particulière qui peut poser problème : comment faire si mon programme ne rend pas la main et est intéractif ?

La commande magique c’est screen. Cette commande va vous permettre de lancer une commande en la détachant de votre terminal mais de pouvoir continuer à interagir avec cette commande.

Par exemple :

screen -dmS ma_session /chemin/vers/mon/script

Cette commande va lancer le script dans une session appelée ma_session. Le programme s’exécute et fonctionne normalement mais en arrière plan.

Pour interagir avec vous pouvez toujours utiliser la commande screen :

screen -p 0 -S ma_session -X eval 'stuff "ma_commande_a_executer"15'

En activant la fenêtre par défaut de l’application attachée à ma_session, je demande d’exécuter la commande ma_commande_a_executer. Cette commande pourrait être mise dans le script XYZ (dans /etc/init.d) avec un paramètre particulier, par exemple do_my_cmd et sera alors invoquée avec :

service XYZ do_my_cmd

Voilà, j’espère que cet article vous aura donné des informations et pistes pour faire vos propres services. N’hésitez pas à partager vos expériences dans ce domaine technique (ou corriger des erreurs qui se seraient glissées).

Vous aimerez aussi...