logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

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 → ODT PDF Export

Ceci est une ancienne révision du document !


Lancer un script sur une console virtuelle - systemd

  • Objet : Petit Tuto expliquant comment afficher un script sur une console virtuelle
  • Niveau requis :
  • 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 :

    * Création par greenmerlin 25/01/2016 * Commentaires sur le forum : Lien vers le forum concernant ce tuto1) ===== 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. ==Le but du tuto : == Afficher sur le tty1 le résultat d'un script bash, dans mon exemple ce script affichera l'adresse ipv4 de la machine au lieu de l'écran de login habituel et n'affichera qu'un écran de login sur le TTY2 seulement <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 à exécuter ===== 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 <file bash show_my_ip.sh> #! /bin/sh clear while true; do echo -e “\nBonjour et bienvenue sur $HOSTNAME\n\nMon adresse ip est la suivante : \n” ip addr |grep –color=always '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' sleep 10 clear done </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. <note important>ne pas oublier de le rendre éxécutable : <code user>chmod +x mon_script.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 ===== === Avant === sur INIT il suffisait d'éditer l'inittab et de remplacer <code>1:2345:respawn:/sbin/mingetty tty1</code> par <code>1:2345:respawn:/etc/bin/mon_script.sh</code> === 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). Pour modifier ce comportement par défaut de SystemD il faut éditer le fichier <code>/etc/systemd/logind.conf</code> 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> Puis : <code root> systemctl enable getty@tty2.service</code> ===== 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 <note tip>cela correspondait aux scripts présents sous /etc/init.d/ sous INIT</note> <file config /etc/systemd/system/show_my_ip.service> [Unit] Description=Afficher mon ip avec systemd [Service] type=idle ExecStart=/etc/bin/show_my_ip.sh StandardOutput=tty TTYPath=/dev/tty1 RestartSec=10 [Install] WantedBy=multi-user.target </file> En détails : * description de l'unit qu'est-ce que ça fait,etc… :<code>Description=Afficher mon ip avec systemd </code> * systemd va retarder l'exécution du service jusqu'à ce que tous les autres soient finis :<code>type=idle </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>chmod 755 /etc/systemd/system/show_my_ip.service;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 ===== Résultat =====

1)
N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !
doc/programmation/bash/script/systemd/script-sur-un-vt.1454660570.txt.gz · Dernière modification: 05/02/2016 09:22 par smolski

Pied de page des forums

Propulsé par FluxBB