[tuto][linux][novice] Comment lancer un script ou commande au démarrage

Tu connais les bases et tu veux en apprendre d'avantage.
Avatar de l’utilisateur
N4T0R4
Administrateur
Messages : 42
Inscription : 09 décembre 2023, 21:45

[tuto][linux][novice] Comment lancer un script ou commande au démarrage

Message par N4T0R4 »

Par cron

Cron, le gestionnaire de tâches de Linux, permet d’exécuter très facilement une commande ou script au démarrage de Linux.
C’est la méthode la plus simple et universelle à toutes les distributions Linux.
Voici comment faire :

Editez les cron avec la commande crontab -e
Ajoutez ensuite la ligne suivante :

Code : Tout sélectionner

@reboot /chemin/vers/script.sh
Le script s’exécutera au démarrage de l'ordinateur

Avec rc.local

Cette méthode rc.local très ancienne était disponible sur toutes les distributions.
Il s’agit d’un script qui était automatiquement exécuté au démarrage de Linux.
L’utilisateur peut alors ajouter une entrée pour ajouter ses propres commandes.
Malheureusement, avec l’arrivé de systemD, ce script a été supprimé sur beaucoup de distributions Linux.

Vérifiez que le fichier /etc/rc.local existe, si oui, ajoutez simplement votre script pour qu’il s’exécute au lancement de Linux :

Code : Tout sélectionner

echo "/chemin/vers/script.sh" >> /etc/rc.local
Avec init.d

Comme pour la solution précédente, le dossier /etc/init.d contient les exécutables du cycle de vie des services gérés par le système. Nous pouvons également ajouter le nôtre en créant un script monservice conforme à LSB qui démarre notre service :

Code : Tout sélectionner

nano /etc/init.d/monservice
Voici un exemple de contenu, modifiez les commentaires et le chemin du script à exécuter au démarrage de Linux :

Code : Tout sélectionner

#!/bin/bash
### BEGIN INIT INFO
# Provides: MonService
# Required-Start:    $all
# Required-Stop: 
# Default-Start:     5 
# Default-Stop:      6 
# Short-Description: Description du service
### END INIT INFO

/chemin/vers/script.sh
Autre exemple avec les fonctions start et stop :

Code : Tout sélectionner

#! /bin/bash

### BEGIN INIT INFO
# Provides:          foo
# Required-Start:    $local_fs $network
# Required-Stop:     $local_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: foo service
# Description:       Run Foo service
### END INIT INFO

# Carry out specific functions when asked to by the system
case "$1" in
  start)
    echo "Starting Foo..."
    sudo -u foo-user bash -c 'cd /path/to/scripts/ && ./start-foo.sh'
    ;;
  stop)
    echo "Stopping Foo..."
    sudo -u foo-user bash -c 'cd /path/to/scripts/ && ./stop-foo.sh'
    sleep 2
    ;;
  *)
    echo "Usage: /etc/init.d/foo {start|stop}"
    exit 1
    ;;
esac

exit 0
Puis il faut activer le service au démarrage de Linux.
Pour activer le service sur les distributions à base Debian (Ubuntu, Linux Mint, etc), on utilise update-rc.d :

Code : Tout sélectionner

chmod +x /etc/init.d/monservice
update-rc.d monservice defaults
Du côté des distributions Linux à base Redhat comme Fedora, RHL, il faudra utiliser la commande chkconfig :

Code : Tout sélectionner

chmod +x /etc/init.d/monservice
chkconfig --add monservice
Pour relancer un daemon ou service, vous pouvez passer par le script, par exemple :

Code : Tout sélectionner

/etc/init.d/monservice start
/etc/init.d/monservice stop
Par systemd

Une autre solution pour placer une commande ou script au démarrage de Linux est de créer un service systemd.
Cela peut en outre permettre de faire tourner un daemon.

Nous devons créer un descripteur de service, appelé fichier d’unité, dans /etc/systemd/system :

Code : Tout sélectionner

nano /etc/systemd/system/monservice.service

Code : Tout sélectionner

[Unit]
Description=Service systemd au démarrage Linux

[Service]
Type=simple
ExecStart=/bin/bash /chemin/vers/script.sh

[Install]
WantedBy=multi-user.target
Le fichier est organisé en différentes sections :
  • Unit – contient des métadonnées générales, comme une description lisible par l’homme
  • Service – décrit le processus et le comportement de démonisation, ainsi que la commande pour démarrer le service
  • Install – permet au service de s’exécuter au démarrage en utilisant le dossier spécifié dans WantedBy pour gérer les dépendances
Ensuite, nous devons définir les permissions du fichier à 644 et activer notre service à l’aide de systemctl :

Code : Tout sélectionner

chmod 644 /etc/systemd/system/monservice.service
systemctl enable monservice.service
Source : https://www.malekal.com/linux-executer- ... demarrage/
Répondre