Jump to content

Lancement ssh distant


Recommended Posts

Bonjour,

j'aurais besoin de votre aide, s'il vous plait, concernant la commande ssh :

sous linux via un shell "testdav1.sh" , je lance la commande suivante :

ssh -l pandore alsace /pandore/serveur/specif/cirad/n/sh/testdav2.sh

Sur ma machine alsace, le shell testdav2.sh fait juste un sleep 50.

je me rends compte que lorsque je tue testdav1.sh, je me rends compte que testdav2.sh tourne toujours sur ma machine distante.

Comment faire pour qu'il se tue en même temps que le père ?

je vous remercie par avance,

David

Link to comment
Share on other sites

il faut que tu envoies une nouvelle commande via ssh, genre killall testdav2.sh

:transpi:

ok mais tout cela est doit géré dans mon batch. Cela veut dire par exemple que lorque mon serveur tombe la nuit, je veux que les processus fils lancés par ssh soit également killés automatiquement.

Link to comment
Share on other sites

et comment il s'arrête ton truc ?

mon processus père lance à distance son fils via ssh.

- donc dans un situation normale, le fils s'éxécute et se termine, puis le père se termine ( cf mon premier message pour le code )

- maintenant si je kill mon père ( je le kill pour simuler ( = tester ) un incident technique tel que le serveur qui tombe ), je me rends compte que le fils tourne toujours. Hors je voudrais que le fils se kill également .... en même temps que le père. Voilà mon souci ...

Link to comment
Share on other sites

mhmm, en fait, tu voudrais un connection permanente entre les deux processus...

j'ai une solution hyper bourrine : sur chacune des machine tu sotck le pid de ton process (/var/run), et tu fais un démon qui check chroniquement que ce processus existe sur l'autre machine (ssh ps $(cat /var/run/monpid) par exemple). si ps ne renvois rien alors il kill le processus local (kill -9 $(cat /var/run/monpid) par exemple)

mais tu n'auras pas la synchro exacte (tout dépend du rafraichissement du démon)

Link to comment
Share on other sites

mhmm, en fait, tu voudrais un connection permanente entre les deux processus...

j'ai une solution hyper bourrine : sur chacune des machine tu sotck le pid de ton process (/var/run), et tu fais un démon qui check chroniquement que ce processus existe sur l'autre machine (ssh ps $(cat /var/run/monpid) par exemple). si ps ne renvois rien alors il kill le processus local (kill -9 $(cat /var/run/monpid) par exemple)

mais tu n'auras pas la synchro exacte (tout dépend du rafraichissement du démon)

c'est en effet une solution, aussi bourrine soit elle, ca reste une solution ...

Bizarre qu'il n'y ait pas d'option avec le ssh ...

en tout cas merci pour ton aide

Link to comment
Share on other sites

le problème c'est que par défaut la connexion ssh est persistante sur le serveur (option TCPKeepAlive de ssh_config et sshd_config). Enfin en général c'est pratique : s'il y a une coupure momentanée de la connexion, la liaison ssh ne tombe pas. Dans ton cas ça ajoute de la latence. Mais tu peux placer cette option à 'no' et l'option ServerAliveInterval et ClientAliveInterval au nombre de secondes désirées (man ssh_config et man sshd_config).

Comme commandes il y a pgrep et pkill qui peuvent être utiles.

pgrep -f "sshd: pandore" # sur le serveur SSH

ou

pgrep -f "ssh -l pandore alsace /pandore/serveur/specif/cirad/n/sh/testdav2.sh" # sur le client SSH

pkill -f "sshd: pandore" # ...

édit: je vois ça dans le cadre d'un test sur le serveur SSH :

if ! pgrep -f "sshd: pandore"
then
pkill ma_commande
fi

Je me demande si l'option -O de ssh ne correspondrait pas à tes besoins

-O ctl_cmd

Control an active connection multiplexing master process. When the -O option is

specified, the ctl_cmd argument is interpreted and passed to the master process.

Valid commands are: ``check'' (check that the master process is running) and

``exit'' (request the master to exit).

Mais là c'est pas très clair :yes: ... à creuser.

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...