Vous n'êtes pas identifié(e).
L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT →
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente Prochaine révision Les deux révisions suivantes | ||
doc:programmation:bash:script:systemd:script-sur-un-vt [26/01/2016 15:41] greenmerlin [Comment lancer un script sur une console virtuelle en utilisant systemd] |
doc:programmation:bash:script:systemd:script-sur-un-vt [08/06/2024 17:19] agp91 [Script de démarrage pour systemd] |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== Comment lancer un script sur une console virtuelle en utilisant systemd ====== | + | ====== Lancer un script sur une console virtuelle - systemd ====== |
* Objet : Petit Tuto expliquant comment afficher un script sur une console virtuelle | * Objet : Petit Tuto expliquant comment afficher un script sur une console virtuelle | ||
* Niveau requis : {{tag>avisé}} | * Niveau requis : {{tag>avisé}} | ||
- | * Commentaires : Depuis le passage de INIT à SystemD certaines choses simples sont devenues plus complexes / comment j'en suis arrivé là : j'ai voulu afficher sur le tty1 de mes machines virtuelles leur adresse ipv4 au lieu de l'écran de login habituel | + | * Commentaires : Depuis le passage de INIT à SystemD certaines choses simples sont devenues plus complexes \\ comment j'en suis arrivé là : j'ai voulu afficher sur le tty1 de mes machines virtuelles leur adresse ipv4 au lieu de l'écran de login habituel |
- | * Suivi : {{tag>en-chantier à-tester à-placer}} | + | * Suivi : {{tag>à-tester}} |
* Création par [[user>greenmerlin]] 25/01/2016 | * Création par [[user>greenmerlin]] 25/01/2016 | ||
- | * Commentaires sur le forum : [[ https://debian-facile.org/viewtopic.php?pid=159703| Lien vers le forum concernant ce tuto]]((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) | + | * Commentaires sur le forum : [[https://debian-facile.org/viewtopic.php?pid=159703| Lien vers le forum concernant ce tuto]]((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) |
===== Introduction ===== | ===== Introduction ===== | ||
Depuis le changement d'INIT à SystemD beaucoup d'entre nous ont dû réapprendre... des choses simples que faisait /etc/inittab à la sauce SystemD. | Depuis le changement d'INIT à SystemD beaucoup d'entre nous ont dû réapprendre... des choses simples que faisait /etc/inittab à la sauce SystemD. | ||
Ligne 15: | Ligne 15: | ||
<note warning>Vu qu'on bosse sur le Systemd je vous déconseille de bosser en SSH (vous verrez pas les changements lol)</note> | <note warning>Vu qu'on bosse sur le Systemd je vous déconseille de bosser en SSH (vous verrez pas les changements lol)</note> | ||
- | ===== Le script a exécuté ===== | + | ===== Le script à exécuter ===== |
Bon on commence par le plus simple : | Bon on commence par le plus simple : | ||
- | Pour plus de commodité j'enregistre toujours mes scripts perso dans /etc/bin, donc la je le créer dans /etc/bin/show_my_ip.sh | + | Je crée le script dans /usr/local/bin/show_my_ip.sh |
<file bash show_my_ip.sh> | <file bash show_my_ip.sh> | ||
- | #! /bin/sh | + | #!/bin/sh |
clear | clear | ||
while true; | while true; | ||
Ligne 29: | Ligne 30: | ||
done | done | ||
</file> | </file> | ||
- | Je ne commente pas le script car c'est pas le but du tuto(si vous voulez plus d'explication --> MP), | + | |
- | Ce script Bash va afficher en continue l'adresse ipv4 des différentes interfaces réseau | + | Je ne commente pas le script car c'est pas le but du tuto(si vous voulez plus d'explication --> MP). |
- | <note important>ne pas oublier de le rendre éxécutable --> chmod +x mon_script.sh</note> | + | |
- | ensuite vu que je veux afficher ce script sur mon tty1 il va falloir que je dise à SystemD d’arrêter de lancer agetty FIXME(expliquer) sur le tty1 | + | Ce script Bash va afficher en continue l'adresse ipv4 des différentes interfaces réseau. |
+ | <note important>ne pas oublier de le rendre exécutable : <code root>chmod +x /usr/local/bin/show_my_ip.sh</code></note> | ||
+ | Ensuite, vu que je veux afficher ce script sur mon tty1 il va falloir que je dise à SystemD d’arrêter de lancer agetty FIXME(expliquer) sur le tty1. | ||
===== Configuration de SystemD ===== | ===== Configuration de SystemD ===== | ||
=== Avant === | === Avant === | ||
Ligne 40: | Ligne 43: | ||
<code>1:2345:respawn:/etc/bin/mon_script.sh</code> | <code>1:2345:respawn:/etc/bin/mon_script.sh</code> | ||
=== Maintenant === | === Maintenant === | ||
- | Maintenant avec SystemD, un seul getty est lancé par défaut. Si vous vous déplacez sur un autre tty(Ctr+Alt+F2 par exemple), getty sera lanceé ici (de manière interactive). | + | Maintenant avec SystemD, un seul getty est lancé par défaut. Si vous vous déplacez sur un autre tty(<key>C-A-F2</key> par exemple), getty sera lancé ici (de manière interactive). |
- | Pour modifier ce comportement par défaut de **SystemD** il faut éditer le fichier <code>/etc/systemd/logind.conf</code> | + | Pour modifier ce comportement par défaut de **SystemD** il faut désactiver le service qui exécute getty sur tty1 |
- | Puis dé-commenter NAutoVTs=6 et placer sa valeur à zéro. | + | |
- | ça devrait vous donner un fichier comme ça | + | |
- | <file config /etc/systemd/logind.conf> | + | |
- | # This file is part of systemd. | + | |
- | # | + | |
- | # systemd is free software; you can redistribute it and/or modify it | + | |
- | # under the terms of the GNU Lesser General Public License as published by | + | |
- | # the Free Software Foundation; either version 2.1 of the License, or | + | |
- | # (at your option) any later version. | + | |
- | # | + | |
- | # See logind.conf(5) for details | + | |
- | + | ||
- | [Login] | + | |
- | NAutoVTs=0 | + | |
- | #ReserveVT=6 | + | |
- | #KillUserProcesses=no | + | |
- | #KillOnlyUsers= | + | |
- | ... | + | |
- | </file> | + | |
- | Ensuite on lui dit de démarrer quand même un login sur le tty2, pour ce faire : | + | |
<code root>systemctl disable getty@tty1.service</code> | <code root>systemctl disable getty@tty1.service</code> | ||
- | Puis : | + | Ensuite on lui dit de démarrer quand même un login sur le tty2, pour ce faire : |
<code root> systemctl enable getty@tty2.service</code> | <code root> systemctl enable getty@tty2.service</code> | ||
===== Script de démarrage pour systemd ===== | ===== Script de démarrage pour systemd ===== | ||
+ | |||
Il va falloir créer un script de démarrage pour SystemD afin de lancer notre script sur le tty1 | Il va falloir créer un script de démarrage pour SystemD afin de lancer notre script sur le tty1 | ||
<note tip>cela correspondait aux scripts présents sous /etc/init.d/ sous INIT</note> | <note tip>cela correspondait aux scripts présents sous /etc/init.d/ sous INIT</note> | ||
Ligne 75: | Ligne 59: | ||
[Service] | [Service] | ||
type=idle | type=idle | ||
- | ExecStart=/etc/bin/show_my_ip.sh | + | ExecStart=/usr/local/bin/show_my_ip.sh |
StandardOutput=tty | StandardOutput=tty | ||
TTYPath=/dev/tty1 | TTYPath=/dev/tty1 | ||
Ligne 83: | Ligne 67: | ||
WantedBy=multi-user.target | WantedBy=multi-user.target | ||
</file> | </file> | ||
- | En détails : | + | En détails : |
- | <code>Description=Afficher mon ip avec systemd</code> #description de l'unit qu'est-ce que ça fait,etc... | + | |
- | <code>type=idle</code> #systemd va retarder l'exécution du service jusqu'à ce que tous les autres soient finis | + | |
- | <code>ExecStart=/bin/bash /etc/show_my_ip.sh</code> #la ligne de commande à exécuter | + | |
- | <code>StandardOutput=tty</code> #spécifier où va la sortie "standard du script" ou peut l'afficher dans les log, un tty, ou pas l'afficher du tout | + | |
- | <code>TTYPath=/dev/tty1</code> #je précise sur quel tty je veux qu'il s'affiche | + | |
- | <code>RestartSec=10</code> #si mon script est killer, SystemD le relancera automatiquement toutes les 10ms | + | |
- | <code>WantedBy=multi-user.target</code> # c'est un script que l'usager demande **obligatoire** | + | |
- | Dernière phase : | + | * description de l'unit qu'est-ce que ça fait,etc... :<code>Description=Afficher mon ip avec systemd </code> |
- | je modifie les droits de mon script SystemD puis je l'active au démarrage | + | * systemd va retarder l'exécution du service jusqu'à ce que tous les autres soient finis :<code>type=idle </code> |
- | <code root>chmod 755 /etc/systemd/system/show_my_ip.service;systemctl enable show_my_ip</code> | + | * la ligne de commande à exécuter :<code>ExecStart=/bin/bash /etc/show_my_ip.sh </code> |
+ | * spécifier où va la sortie "standard du script" ou peut l'afficher dans les log, un tty, ou pas l'afficher du tout :<code> StandardOutput=tty</code> | ||
+ | * je précise sur quel tty je veux qu'il s'affiche :<code>TTYPath=/dev/tty1 </code> | ||
+ | * si mon script est killer, SystemD le relancera automatiquement toutes les 10ms :<code>RestartSec=10</code> | ||
+ | * c'est un script que l'usager demande **obligatoire** :<code>WantedBy=multi-user.target</code> | ||
+ | |||
+ | Dernière phase : \\ | ||
+ | je modifie les droits de mon script SystemD puis je l'active au démarrage : | ||
+ | <code root>systemctl enable show_my_ip</code> | ||
Et voilà ! un petit reboot et à la place de l’écran de login habituel sur le tty1 vous verrez l'exécution de votre script | Et voilà ! un petit reboot et à la place de l’écran de login habituel sur le tty1 vous verrez l'exécution de votre script | ||
===== Résultat ===== | ===== Résultat ===== | ||
+ | {{https://debian-facile.org/images/file-Reda0b8260517f425575ddbdefef3ed2f.png}} | ||
+ | |||
+ | {{https://debian-facile.org/images/file-R635089f471126a55c82d38bc4b42e173.png?600}} | ||
- | [[http://pix.toile-libre.org/?img=1453733608.png]] |