GNU/Linux >> Tutoriels Linux >  >> Debian

Comment exécuter un script au démarrage dans Debian 11

Le démarrage en termes simples fait référence au temps écoulé entre la mise sous tension et le démarrage de l'utilisateur. Ceci est réalisé en utilisant un script de démarrage qui contient des instructions sur le code à charger et les processus et applications à démarrer.

Il y a quelques étapes de démarrage de Linux (avant de démarrer dans systemd ou System V init et avant que l'environnement de bureau ne soit chargé), et vous pouvez configurer votre propre script ou programme de démarrage automatique à n'importe quelle étape où il peut s'agir d'une seule commande ou plutôt d'un série de commandes ou un script shell exécutable. Néanmoins, il est instructif de noter qu'il peut y avoir des différences dans la procédure de démarrage entre les différentes distributions et versions de Linux.

Les versions modernes de Linux démarreront d'abord dans systemd tandis que les anciennes versions utilisent System V init . Les deux méthodes exécuteront cron et rc.local avant que les environnements de bureau tels que KDE ou GNOME ne soient chargés. D'un autre côté, les distributions Linux basées sur un serveur exécutent le shell par défaut, par exemple, Bash, une fois que l'utilisateur s'est connecté à la console au lieu de charger l'environnement de bureau.

Pour ajouter correctement des services et des scripts au démarrage sur Debian 11, vous devez créer des unités Systemd. Ce guide se concentrera sur trois méthodes pour ajouter des scripts au démarrage sur votre machine Debian 11 :

  1. Utiliser systemd
  2. Utiliser cron
  3. Utiliser rc.local

Commençons.

Qu'est-ce qu'une unité systemd ?

Les unités Systemd sont des fichiers de configuration contenant des informations pour la gestion ou l'exécution appropriée de certains fichiers système. Dans systemd, une unité désigne toute ressource que le système sait utiliser et gérer. Les unités Systemd sont généralement utilisées pour démarrer, arrêter, gérer les services, organiser les processus de démarrage, gérer les tâches et les processus, créer des sockets, des points de montage automatique, échanger des fichiers ou des partitions, monter le système de fichiers et initialiser le matériel.

Les unités systemd sont positionnées sous le répertoire /etc/systemd/system. Tout script que vous souhaitez exécuter au démarrage à l'aide d'unités Systemd doit être indiqué dans un fichier (unité) sous le répertoire mentionné ci-dessus.

Pour simplifier la relation entre systemd et unités mieux, considérez systemd en tant qu'entraîneur d'une équipe puis les unités comme les commodités et les nécessités de l'équipe, par exemple, balles, cors, gymnase, terrain de jeu, kits de jeu, pour n'en citer que quelques-uns. Donc, pour qu'un entraîneur gère l'équipe afin qu'elle soit plus performante, il utilise l'équipement disponible pour améliorer profondément l'équipe. De même, le systemd utilise des unités pour contrôler et gérer les processus et services du système.

Certains des types d'unité Systemd incluent :
  • Cible – Ensemble d'unités décrivant un point de synchronisation. Le point de synchronisation est utilisé au démarrage pour lancer le système dans un état spécifique.
  • Monter – Une unité de ce type contrôle le point de montage du système de fichiers.
  • Appareil – Une unité de ce type adapte l'activation basée sur l'appareil comme un pilote d'appareil.
  • Prise – Ce type d'unité active un service lorsque le service reçoit du trafic entrant sur un socket d'écoute.
  • Chemin – Ce type d'unité surveille les fichiers/répertoires puis active/désactive un service si le fichier ou le répertoire indiqué est récupéré.
  • Minuterie – Ce type d'unité effectue l'activation et la désactivation d'un service spécifié en fonction d'une minuterie ou lorsque le temps défini s'est écoulé.
  • Portée – Une unité qui systématise et gère les processus étrangers.

Liste des unités systemd

Vous trouverez ci-dessous une vue rapide des unités systemd existantes dans notre système en utilisant le ls commande.

ls /etc/systemd/system

L'un des fichiers exclus dans l'instantané ci-dessus est le tomcat.service, dont le contenu est tel qu'affiché par l'image suivante.

Pour vous familiariser avec les fichiers de configuration de l'unité dans l'instantané ci-dessus, consultez les informations détaillées suivantes. Ne vous inquiétez pas pour eux car l'unité que vous créerez pour exécuter votre script sera un peu plus simple.

Les directives de l'unité incluent :
  • Description : Cette directive vous permet généralement d'ajouter une description pour une unité; ici, vous pouvez définir le nom de l'unité à reconnaître.
  • Souhaite : Les dépendances d'unité sont habituellement spécifiées ici. Un point à noter est qu'il existe diverses directives à cette fin similaire. Par exemple, la directive Requires stipule des dépendances strictes, sans lesquelles l'unité ne peut pas fonctionner. Contrairement à Requires, Wants est utilisé pour spécifier les dépendances sans lesquelles l'unité peut continuer à fonctionner.
  • Après : L'unité actuelle commencera après l'unité désignée dans cette directive.
Directives de la section [Service] :

  • Tapez : le forking indique que le service doit être tué tout en conservant les processus enfants auxquels une identification de processus (PID) doit être attribuée.
  • Environnement : Ici, on peut spécifier les variables d'environnement de l'unité.
  • ExecStart : Cette directive vous permet de spécifier le chemin et les commandes que vous souhaitez exécuter.
  • ExecStop : vous pouvez indiquer la commande utilisée pour arrêter l'unité.
  • SuccessExitStatus : Cette directive vous permet d'énumérer l'état et les signaux de sortie.
  • Utilisateur : vous pouvez identifier l'utilisateur propriétaire de l'unité.
  • Groupe : vous pouvez énumérer le groupe propriétaire de l'unité.
  • UMask : vous pouvez spécifier le masque d'utilisateur.
  • RestartSec : Si l'unité redémarre spontanément, vous pouvez spécifier le temps d'attente pour redémarrer le service.
  • Redémarrer : vous pouvez indiquer à Systemd quand l'unité doit être redémarrée. Les options accessibles sont toujours sur chien de garde, en cas d'échec, en cas d'anomalie, en cas de réussite et en cas d'abandon.

La directive [Install] dans l'instance ci-dessus est WantedBy.

  • Recherché par : Cette directive vous permet de définir l'unité comme une dépendance ; cela s'apparente aux désirs directive, mais pour indiquer si l'unité actuelle est bien pensée en tant que dépendance par une autre unité.

Autres directives habituelles dans la section [Unité] qui n'étaient pas incorporées dans la capture d'écran précédente :

  • Nécessite : Dans cette directive, vous pouvez désigner des dépendances pour éviter les échecs de démarrage. S'opposer aux désirs directive, si une dépendance désignée par la directive Requires n'est pas satisfaite, l'unité ne fonctionnera pas.

Dans la rubrique [Service] :

  • PIDFile : La directive forking nécessite la directive PIDFile, qui a le chemin vers le fichier PID du processus enfant pour que Systemd le détecte.
  • StartLimitInterval : spécifie que l'unité dispose de 60 secondes pour 10 essais pour redémarrer en cas d'échec.
  • StartLimitBurst : Cette directive montre la limite de tentatives, dans l'exemple précédent, dix tentatives en 60 secondes.

Vous pouvez visiter ce lien pour plus d'informations sur les unités Systemd.

Exécuter un script au démarrage dans Debian 11

Méthode 1 :Utiliser l'unité systemd pour exécuter un script au démarrage

L'exécution d'un script au démarrage peut être simple et posséder moins de configuration que le fichier tomcat.service que nous utilisions auparavant pour afficher le contenu commun de l'unité.

Les fichiers (unités) contenant les informations sur les scripts exécutés au démarrage sont positionnés dans le fichier /etc/systemd/system. Pour exprimer un script à exécuter au démarrage, vous devez générer une nouvelle unité pour ce script. En tant que tel, vous pouvez utiliser n'importe quel éditeur à des fins de création. Cependant, dans notre cas, nous utiliserons l'éditeur nano, dans lequel nous créerons une unité nommée script.service. Notez que ce nom peut être remplacé par l'une de vos préférences pour identifier facilement votre script.

sudo nano /etc/systemd/system/script.service

Après cela, copiez et collez le code suivant dans le fichier que vous avez généré sous /etc/systemd/system.

 avec le chemin d'accès à votre script.[Unit]Description=Votre nom de script hereAfter=default.target[Service]ExecStart=/PATH/TO/Script.sh[Install]  

Après cela, n'oubliez pas de remplacer par le nom de votre script et par le chemin d'accès à votre script comme indiqué ci-dessous :

Après avoir copié les données dans le fichier sous /etc/systemd/system/, vous devez l'activer via la commande systemctl affichée ci-dessous.

sudo systemctl enable script.service

Remarque : N'oubliez pas de remplacer par le nom approprié que vous avez attribué à l'unité.

Et boum ! Votre script est maintenant prêt à démarrer dans Debian 11

Méthode 2 :comment exécuter automatiquement un programme au démarrage de Linux via Cron

Cron est un démon utilisé pour exécuter des commandes planifiées. Les commandes sont stockées dans la table des tâches de la couronne ou contrab et sont propres à chaque utilisateur du système. Il est lancé lors du démarrage du système soit par System V init ou systemd, et vous pouvez programmer votre travail ou programmer à la place pour qu'il soit exécuté directement pendant le démarrage du système lui-même en suivant attentivement les étapes suivantes :

Étape 1 : Ouvrez l'éditeur de contrab par défaut en exécutant la commande suivante :

crontab -e

Si c'est la première fois que vous exécutez la commande contrab, vous devrez choisir un éditeur comme indiqué par le morceau de code suivant :

$ crontab -eno crontab pour l'utilisateur - en utilisant un videSélectionnez un éditeur. Pour changer plus tard, lancez 'select-editor'.1. /bin/nano <---- plus facile2. /usr/bin/vim.basic3. /bin/edChoisissez 1-3 [1] :

Lors de la sélection du nombre d'options donné, un contrab sera créé pour vous et exécuté en utilisant les privilèges de l'utilisateur. Si vous avez besoin que votre programme s'exécute en tant qu'utilisateur root, exécutez contrab -e en tant qu'utilisateur root lui-même

Étape 2 : Ajouter une ligne commençant par @reboot

# m h dom mon dow command@reboot

Étape 3 : Insérez la commande préférée pour démarrer votre programme après le @ redémarrage comme indiqué ci-dessous :

@reboot /sbin/adresse IP | grep inet\ | queue -n1 | awk '{ print $2 }'> /etc/issue &&echo "">> /etc/issue

@reboot définit la tâche à exécuter lors du démarrage du système.

Remarque : Assurez-vous d'utiliser le chemin complet de vos programmes dans la mesure du possible et écrivez vos commandes sur une seule ligne pour éviter les conflits avec le système.

Étape 4 :Enregistrez le fichier

Après avoir fermé l'éditeur en utilisant le "Ctrl + x" comme indiqué ci-dessous

puis "O" pour économiser,

Vous devriez voir une commande indiquant « installing new contrab » dans le terminal comme indiqué ci-dessous :

Étape 5 :Configuration

Enfin, vous pouvez exécuter une vérification pour confirmer si le contrab a été configuré correctement. Cependant, il est essentiel de noter que cette étape n'est pas obligatoire

crontab -l

Et ça devrait le faire, les gars !

Méthode 3 :Comment exécuter automatiquement un programme au démarrage de Linux via RC.LOCAL

rc.local est simplement un héritage du système d'initialisation System V. Il s'agit du dernier script à exécuter avant de passer à un écran de connexion pour l'environnement de bureau ou à une invite de connexion sur le terminal. Il s'agit généralement d'un script shell Bash, et vous pouvez également exécuter n'importe quoi à partir du script. Utilisez les étapes suivantes pour configurer votre script rc.local local.

Étape 1 : Tout d'abord, créez le fichier /etc/rc.local s'il n'existe pas sur votre système à l'aide de votre éditeur préféré et en tant qu'utilisateur root. Dans notre cas, nous utiliserons l'éditeur Vi en exécutant la commande suivante :

sudo vi /etc/rc.local

Étape 2 : Ajouter un code d'espace réservé

Après cela, ajoutez le code d'espace réservé suivant dans le fichier

#!/bin/bashexit 0

Il doit commencer par l'interpréteur (/bin/bash) et se terminer par un code de sortie (0 qui désigne le succès).

Étape 3 : Ajouter une commande et des logiques

Ici, vous ajouterez des commandes et des logiques aux fichiers si nécessaire.

/sbin/adresse IP | grep inet\ | queue -n1 | awk '{ print $2 }'> /etc/issueecho "">> /etc/issue

Découvrez comment cela se fait dans l'instantané suivant.

Étape 4 :Enregistrez et quittez l'éditeur Vi

Pour enregistrer et quitter un fichier dans l'éditeur Vim, utilisez le ":wq" commande. Nous voulons enregistrer le fichier et quitter l'éditeur simultanément pour exécuter la commande qui rend le fichier exécutable. En tant que tel, appuyez sur ESC qui passera en mode normal. Après cela, tapez :wq et appuyez sur "Entrée".

Étape 5 : Rendre le fichier exécutable

Après avoir enregistré le fichier, nous devons le rendre exécutable à l'aide de la commande suivante :

sudo chmod a+x /etc/rc.local

Le fichier doit alors être exécuté en tant qu'utilisateur root lors du démarrage du système.

Conclusion

En conclusion, exécuter des scripts au démarrage dans Debian 11 en utilisant Systemd, cron et rc.local est relativement facile. Tout utilisateur Linux peut rapidement effectuer cette tâche en créant un simple fichier dans le répertoire des unités. Cet article a décrit différentes manières d'exécuter un script au démarrage dans la distribution Linux, en particulier Debian.

Chacun a ses avantages et ses inconvénients, mais d'une manière générale, systemd et cron devraient être les options les plus préférées. De l'autre côté, vous pouvez également utiliser rc.local que nous avons également examiné.


Debian
  1. Script de démarrage utorrent / exécuter utorrent au démarrage – Ubuntu 14.04 / 14.10

  2. Debian – Comment exécuter des programmes 32 bits sur une Debian/ubuntu 64 bits ?

  3. Comment exécuter un script ? ?

  4. Comment exécuter un script lorsqu'un courrier arrive sur le serveur de messagerie ? (Debian)

  5. Comment exécuter un script avec systemd juste avant l'arrêt ?

Comment exécuter un script Python en PHP

Comment installer Wine pour exécuter des applications Windows sur Debian

Comment exécuter un script Shell en tant que service SystemD sous Linux

Comment exécuter Unetbootin sur Debian 11 Bullseye

Comment exécuter un script bash

Debian – Comment réparer le grub sur Debian ?