GNU/Linux >> Tutoriels Linux >  >> Linux

Empêcher l'écran Gnu de mettre fin à la session une fois le script exécuté terminé ?

J'essaie de forcer l'écran GNU à créer un terminal "virtuel", sans s'y attacher, à exécuter le script à l'intérieur et à NE PAS terminer la session une fois le script terminé.

J'ai essayé de nombreuses combinaisons, notamment :

screen -dmS udplistener /share/Sys/autorun/start_udp_listeners.sh

ou

screen -S udplistener -X /share/Sys/autorun/start_udp_listeners.sh

et aucun d'eux n'a fonctionné. Soit j'obtiens une session sans script exécuté, soit le script s'exécute, mais la session se termine une fois qu'elle est terminée, soit j'obtiens l'erreur "Aucune session d'écran trouvée".

Ce que j'essaie essentiellement de faire, c'est d'exécuter un écouteur UDP, écrit en PHP et de le faire fonctionner en boucle infinie (ne pas casser l'écoute). Oui - je pourrais exécuter un script PHP avec & à la fin, forçant PHP CLI à s'exécuter en tant que démon. Le problème est que j'utilise un morceau de bric-à-brac appelé serveur (QNAP - n'achetez jamais, jamais ce bric-à-brac !) qui semble ignorer cela. Dès que je me déconnecte de la session SSH, les scripts s'arrêtent.

Alors screen semble être la seule option. Mais je ne comprends pas pourquoi il met fin à la session une fois la commande exécutée ou le script terminé ?

MODIFIER :J'ai aussi essayé exemple trouvé sur Internet :

screen -dmS name
screen -S name -p windowname -X stuff 'mc
'

Pas de manque ! Après y avoir attaché (screen -R name ) Je vois que Midnight Commander N'A PAS été exécuté. Bien que l'auteur de l'exemple l'ait dit, ce sera le cas.

Réponse acceptée :

Pour garder l'écran occupé après la fin du script, gardez simplement quelque chose de persistant en cours d'exécution dans une fenêtre. Le choix le plus simple pour ce "quelque chose" est probablement un shell interactif. Voici une façon de le faire (en supposant que bash comme choix de shell interactif) :

screen -dmS session_name sh -c '/share/Sys/autorun/start_udp_listeners.sh; exec bash'
  • -dm :démarre l'écran en mode détaché
  • -S  :définit le nom de la session pour l'écran afin de faciliter sa récupération ultérieure
  • sh -c '...' :au lieu de simplement exécuter votre script, qui se terminera, utilisez sh -c pour exécuter plusieurs commandes
  • exec bash  :après la fin du script, le sh d'en haut basculera vers un shell interactif (bash ), qui ne devrait jamais se fermer tant que quelque chose d'extérieur ne l'a pas terminé. Cela gardera l'screen ouvert tant que le bash l'instance est active.

Linux
  1. Écran Gnu :Imprimer une session détachée sur Stdout ?

  2. Script bash :utilisation de la commande de script d'un script bash pour la journalisation d'une session

  3. Empêcher ssh de briser les paramètres du script shell

  4. Comment exécuter un script à la fin de la session xfce

  5. Comment déverrouiller l'écran du script dans KDE Plasma 5 ?

Comment utiliser l'écran GNU pour gérer les sessions de terminal sous Linux

Supprimer la session GUEST de l'écran de connexion Ubuntu

Comment empêcher Ubuntu de mettre mon moniteur en veille ?

Renommer la session d'écran

Affichage de l'écran GNU + du mastic

Empêcher la console d'effacer l'écran ?