Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

SSH : Impossible de quitter la session

1 réponse
Avatar
Thierry Leurent
Bonjour,

J'ai un problème assez étrange.
Je dois démarrer une application qui est répartie sur plusieurs serveurs.
Sur chaque serveur, il existe un script de démarrage dans /etc/init.d/
Sur une des machines, j'ai un script général qui fait des ssh
root@iautreserveur /etc/init.d/appli start
Une des machine héberge un serveur MicroFocus qui "ne peut démarrer"
depuis une session SSH (TERM=dumb). L'appli se crache en donnant le
message "Run-time message 191: Terminal type not defined (Fatal)".
J'ai résolu le problème en forçant la variable TERM à vt100. L'appli se
lance, le script arrive bien à la dernière ligne mais semble s'arrêter là.
Donc mon script principal reste bloqué sur le SSH :(.

- Exit ne fonctionne pas
- Un suicide du process non plus (kill $$).

J'ai essayé de lancer le ssh en ligne de commande idem.
Le script lancé en local sur "son serveur", fonctionne et je peux quitter
le terminal (konsole TERM=xterm)
En remote même avec xterm, ça ne fonctionne pas.
J'ai crée un autre script qui se contente de changer la variable TERM et
de faire un ls. Ca fonctionne.


Je n'y comprends plus rien. Comment une appli peut-elle empécher la fin
d'un script et/ou d'une session ?

Quelqu'un a-t-il une idée ?

--
Thierry Leurent


--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists Vous pouvez aussi ajouter le mot
``spam'' dans vos champs "From" et "Reply-To:"

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-french-REQUEST@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listmaster@lists.debian.org

1 réponse

Avatar
François Cerbelle
Thierry Leurent a écrit :
[...]
Je n'y comprends plus rien. Comment une appli peut-elle empécher la fin
d'un script et/ou d'une session ?
Quelqu'un a-t-il une idée ?



Salut Thierry,

L'appli n'empêche pas la fin du script. Ton script se termine bien. En
revanche, lorsque ton application passe en mode démon, elle effectue un
fork (appel système) pour cloner le processus. Le processus père, celui
que tu as lancé, se termine et te rend la main alors que le processus
fils reste en mémoire pour effectuer son boulot. Le problème vient
certainement de la procédure de démonisation qui ne referme pas les
descripteurs de fichier par défaut (stdin, stdout, stderr). Tant que ces
descripteurs de fichier ne sont pas refermés (ou redirigés vers d'autres
sources/destinations comme un fichier ou /dev/null), le processus SSH ne
pourra pas terminer sa connexion. Il me semble que SSH dispose d'options
pour résoudre ce problème mais je ne m'en souviens plus (cf man). Sinon,
tu peux essayer d'ajouter des
> /dev/null 2>&1
à la fin de la commande qui exécute ton appli, ou encore, tu peux lancer
la commande dans un "screen" qui capturera ces descripteurs de fichier
et les libèrera lorsque tu le détacheras avant de refermer ta session SSH.

A+
Fanfan

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists Vous pouvez aussi ajouter le mot
``spam'' dans vos champs "From" et "Reply-To:"

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS