Comment créer et exécuter de nouvelles unités de service dans Systemd en utilisant Shell Script
- 4156
- 487
- Thomas Richard
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.serviceVé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.serviceGé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 -lFichiers 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.cibleCré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 serviceJ'espère vraiment vous aider à comprendre quels services, désirs, cibles et exécuter les scripts pendant le démarrage.
- « Comment installer Elasticsearch, Logstash et Kibana (Elk Stack) sur Centos / Rhel 7
- La puissance de Linux «History Command» dans Bash Shell »