Comment créer et exécuter de nouvelles unités de service dans Systemd en utilisant Shell Script

Comment créer et exécuter de nouvelles unités de service dans Systemd en utilisant Shell Script

Il y a quelques jours, je suis tombé sur un Centos 7 Distro 32 bits et j'ai ressenti le désir de le tester sur une ancienne machine 32 bits. Après le démarrage, j'ai réalisé qu'il avait un bug et qu'il perdait la connexion réseau, que j'ai dû le tourner "en haut" manuellement à chaque fois après le démarrage. Donc, la question était de savoir comment puis-je définir un script en faisant ce travail, en cours d'exécution à chaque fois que je démarre ma machine?

Eh bien, c'est très simple et je vous montrerai le système à l'aide d'unités de service. Mais d'abord une petite introduction aux unités de service.

Dans cet article, je vais expliquer ce qu'un «Unité de service» Dans Systemd est, la facilité de créer et d'exécuter une. J'essaierai de simplifier ce «Cibles» sont, pourquoi nous les appelons «Collections d'unités» Et quels sont leurs "veut". Enfin, nous profitons d'une unité de service pour exécuter notre propre script après la procédure de démarrage.

Il est évident que votre ordinateur est utile en raison des services qu'il offre et pour avoir cette fonctionnalité, de nombreux services doivent être appelés comme les bottes d'ordinateur et atteint différents niveaux. D'autres services sont appelés à être exécutés lorsque l'ordinateur atteint par exemple le niveau de sauvetage (RunLevel 0) et autres lorsqu'il atteint le niveau multi-utilisateurs (Runlevel 3). Vous pouvez imaginer ces niveaux comme cibles.

De manière simple, une cible est une collection d'unités de service. Si vous voulez jeter un œil aux unités de service exécutées dans votre graphique.cible Niveau, Type:

# SystemCTL --Type = Service 
Énumérez toutes les unités de service dans Centos 7

Comme vous pouvez le voir, certains services sont actifs et "en cours d'exécution" Tout le temps, tandis que d'autres courent une seule fois et se terminent (sortant). Si vous souhaitez vérifier l'état d'un service, tapez:

# SystemCTL Status Firewalld.service 
Vérifier l'état du service dans Centos 7

Comme vous pouvez le voir, j'ai vérifié le statut de pare-feu.service (conseil: Vous pouvez utiliser la complets automatique pour le nom du service). Ça m'informe que pare-feu Le service fonctionne tout le temps et il est activé.

Ne manquez pas: Comment configurer le service de tout le monde dans Centos 7

Activé et désactivé signifie que le service sera chargé en permanence ou non, lors du prochain démarrage respectivement. D'un autre côté pour démarrer et arrêter un service a la limitation de la présente session et ce n'est pas permanent.

Par exemple, si vous tapez:

# SystemCTL Stop Firewalld.Service # SystemCTL Status Firewalld.service 
Gérer les services dans Centos 7

Vous pouvez voir que le pare-feu.service est inactif (mort) mais il est toujours activé, ce qui signifie que pendant le prochain démarrage, il sera chargé. Donc, si nous voulons qu'un service soit chargé pendant le temps de démarrage dans le futur, nous devons l'activer. Quelle grande conclusion! Permet de créer un, c'est facile.

Si vous allez dans le dossier:

# cd / etc / systemd / système # ls -l 
Fichiers système SystemD

Vous pouvez voir des fichiers de liens des services unitaires et des répertoires de la "veut" d'une cible. Par exemple: ce que la cible multi-utilisateurs veut être chargée lorsque la procédure de démarrage atteint son niveau, est répertoriée dans le répertoire avec nom / etc / systemd / système / multi-utilisateurs.cible.veut/.

# LS multi-utilisateurs.cible.veut/ 
Multi utilisateur cible les services

Comme vous pouvez le voir, il ne contient pas seulement prestations de service mais aussi d'autres cibles qui sont également des collections de services.

Faisons une unité de service avec le nom connexion.service.

# connexion vim.service 

et tapez ce qui suit (hit "je" pour le mode insert), enregistrez-le et sortez (avec "Esc" et «: WQ!" ):

[Unité] Description = faire une connexion réseau après = réseau.cible [service] execstart = / root / scripts / conup.sh [installer] recherché = multi-utilisateurs.cible 
Créer de nouvelles unités de service dans Centos 7

Pour expliquer ce qui précède: nous avons créé une unité de type de service (vous pouvez également créer des unités de type cible), nous l'avons réglé pour être chargé après le réseau.cible (Vous pouvez comprendre que la procédure de démarrage atteint les cibles avec une commande définie) et nous voulons que chaque fois que le service commence à exécuter un script bash avec le nom conup.shot que nous allons créer.

Le plaisir commence avec la dernière partie [installer]. Il dit qu'il sera recherché par «Multi-utilisateur.cible". Donc, si nous activons notre service, un lien symbolique à ce service sera créé à l'intérieur du multi-utilisateurs.cible.veut dossier! J'ai compris? Et si nous le désactivons, ce lien sera supprimé. Si simple.

Il suffit de l'activer et de vérifier:

# SystemCTL Activer la connexion.service 

Il nous informe que le lien symbolique dans le multi-utilisateurs.cible.veut Le dossier a été créé. Vérifie ça:

# LS multi-utilisateurs.cible.veut/ 
Activer le service dans Centos 7

Comme tu peux le voir "connexion.service" est prêt pour le démarrage suivant, mais nous devons d'abord créer le fichier de script.

# cd / root # mkdir scripts # cd scripts # vim conup.shot 

Ajouter la ligne suivante à l'intérieur vigueur Et enregistrez-le:

#!/ Bin / Bash NMCLI Connexion UP ENP0S3 

Bien sûr, si vous voulez que votre script exécute autre chose, vous pouvez taper ce que vous voulez au lieu de la deuxième ligne.

Par exemple,

#!/ bac / bash tactime / tmp / testbootfile 

qui créerait un fichier à l'intérieur / tmp dossier (juste pour vérifier que votre service fonctionne).

Nous devons également rendre le script exécutable:

# chmod + x conup.shot 

Maintenant nous sommes prêts. Si vous ne voulez pas attendre le prochain démarrage (il est déjà activé), nous pouvons démarrer le service pour la session actuelle

# SystemCTL Start Connection.service 

Tour! Ma connexion est opérationnelle!

Si vous avez choisi d'écrire la commande "Touch / TMP / TestBootfile" À l'intérieur du script, juste pour vérifier ses fonctionnalités, vous verrez ce fichier créé à l'intérieur / tmp dossier.

Confirmer l'état du service

J'espère vraiment vous aider à comprendre quels services, désirs, cibles et exécuter les scripts pendant le démarrage.