GIT + SSH : Terminer/tuer le socket SSH après la synchro du dépôt

Tout ce qui concerne la programmation.
Répondre
Avatar de l’utilisateur
dezix
Membre hyper actif
Membre hyper actif
Messages : 3546
Inscription : 04 juin 2016, 14:50
Status : Hors-ligne

Bonjour, :006:


Après avoir passé depuis mon poste de travail la commande :

git pull server master


server étant un alias pour le dépôt distant,
p.ex: server ssh://admin@exemple.org:123/chemin/vers/repo.git


Le clone local se trouve sur un HDD externe,
après l'avoir mis à jour et fermé le terminal qui a servi à la synchronisation,
le démontage du HDD avertit que le disque est utilisé par un socket SSH.

Et j'ai effectivement :

Code : Tout sélectionner

$ ps -p 1045833 -f
UID          PID    PPID  C STIME TTY          TIME CMD
dezix   1045833       1  0 13:18 ?        00:00:00 ssh: /home/dezix/.ssh/socket-admin@exemple.org:123 [mux]


Question

Comment doi-je compléter git pull server master
pour fermer ce processus/connexion à la fin de la synchro du dépôt ?

Merci pour vos propositions :banana_parachute:
**Simple Utilisateur** -- Debian stable - XFCE
Avatar de l’utilisateur
Grhim
Membre très actif
Membre très actif
Messages : 1370
Inscription : 30 mai 2016, 01:00
Localisation : kekparr'par'là
Status : Hors-ligne

Avatar de l’utilisateur
dezix
Membre hyper actif
Membre hyper actif
Messages : 3546
Inscription : 04 juin 2016, 14:50
Status : Hors-ligne

Merci.

Je suis nunuche, je n'ai pas pensé direct qu'on peut paramétrer le client :rolleyes:

ServerAliveInterval ; ServerAliveCountMax

Je vais les mettre à des petites valeurs pour qu'il coupe rapidement avec ce serveur.
**Simple Utilisateur** -- Debian stable - XFCE
Avatar de l’utilisateur
dezix
Membre hyper actif
Membre hyper actif
Messages : 3546
Inscription : 04 juin 2016, 14:50
Status : Hors-ligne

Je me suis réjouis trop vite :

Code : Tout sélectionner

ServerAliveInterval 2
ServerAliveCountMax 3
ne déconnecte pas après 2x3=6s suite à la fin de la commande,
je pense que cela ne fonctionne que si la connexion est interrompue par un événement extérieur (p.ex: par le serveur).

Pour maintenant je ne vois pas mieux que : kill -n 15 <pid ssh associé>

Mais la récupération du PID n'est pas triviale car j'ai en général plusieurs réponses à : pgrep ssh

Une solution (pas très fiable) serait : pgrep ssh | tail -n 1
vu que le PID de la dernière commande devrait être le plus grand et que pgrep les affiche par ordre croissant,
mais il y a tout de même une bonne marge d'erreur pour mettre cela dans un script ou un alias de bash.

... à suivre
**Simple Utilisateur** -- Debian stable - XFCE
Avatar de l’utilisateur
dezix
Membre hyper actif
Membre hyper actif
Messages : 3546
Inscription : 04 juin 2016, 14:50
Status : Hors-ligne

Le processus qui reste sinon actif du moins "vivant" n'est pas celui de la commande,
puisque la commande est git alors que le processus restant est ssh
ce qui est ennuyeux...

du coup, je ne peux pas utiliser la variable $! de la commande passée pour ensuite faire un kill -n 15 <pid>


Pour l'instant je n'ai pas mieux que ceci :

Code : Tout sélectionner

Après la synchro j'ai :

$ lsof -U | grep ssh
systemd      1042 dezix   29u  unix 0x0000000019a7757b      0t0  18001 /run/user/1000/gnupg/S.gpg-agent.ssh type=STREAM
ssh       1228074 dezix    4u  unix 0x0000000009108ea3      0t0 421259 /home/dezix/.ssh/socket-admin@exemple.org:123 type=STREAM

d'où :

$ kill -n 15 $(lsof -w -U | egrep '^ssh ' | sed 's/ \{1,\}/ /g' - | cut -d ' ' -f 2)

Ce qui me gêne c'est qu'il pourrait y avoir un autre processus ssh en cours...

Des idées pour améliorer mon affaire ?
**Simple Utilisateur** -- Debian stable - XFCE
Avatar de l’utilisateur
dezix
Membre hyper actif
Membre hyper actif
Messages : 3546
Inscription : 04 juin 2016, 14:50
Status : Hors-ligne

Dans cette histoire, ssh et le socket sont des sous-tâches de la commande git

Existe-t-il dans bash un mécanisme (optionnel) imposant de terminer les sous-tâches à la fin de la tâche principale ?
**Simple Utilisateur** -- Debian stable - XFCE
Avatar de l’utilisateur
dezix
Membre hyper actif
Membre hyper actif
Messages : 3546
Inscription : 04 juin 2016, 14:50
Status : Hors-ligne

Nouvel élément que je n'avais pas remarqué, et qui ne fait que rajouter une couche à mon incompréhension :

Le PPID (pid parent) est : 1 c'est à dire init

Code : Tout sélectionner

$ ps -p866186 -f
UID          PID    PPID  C STIME TTY          TIME CMD
dezix    866186       1  0 12:45 ?        00:00:00 ssh: /home/dezix/.ssh/socket-admin@exemple.org:123 [mux]
**Simple Utilisateur** -- Debian stable - XFCE
Répondre