web-dev-qa-db-fra.com

Tuer un processus sur SSH en recherchant l'ID de processus

Je veux écrire un script qui me permet de tuer un processus en fournissant une commande au script.

La plupart du temps, je travaille, mais mon problème est que j’ai besoin de ssh deux fois pour le tuer. piping, mais je n'arrive pas à le faire fonctionner.

Voici ma version de travail actuelle:

ProcessNumber=`ssh user1@server1 -p22222 ps -ef | awk '/[s]sh -f -N -T -R32400:localhost:32400 remote@remote/{print $2}'`
ssh user1@server1 -p22222 "kill $ProcessNumber"

Et voici le script que je ne parviens pas à faire fonctionner.

ssh user1@server1 -p22222 kill `ps -ef | awk "/[s]sh -f -N -T -R32400:localhost:32400 remote@remote/{print $2}"`

Des suggestions pour que le second fonctionne en une fois?

3
denski

L'analyse de la sortie de ps -ef est un peu délicate. Je vous recommande d'utiliser pgrep comme

pgrep -f `ssh -f -N -T -R32400:localhost:32400 remote@remote`

Ou tout simplement réduire le tout avec pkill:

ssh user1@server1 -p22222 "pkill -f 'ssh -f -N -T -R32400:localhost:32400 remote@remote'"
4
Sergiy Kolodyazhnyy

Quelque chose comme ce vilain one-liner peut faire ça:

ssh user1@server1 -p22222 "kill \$(ps -ef | awk '/[s]sh -f -N -T -R32400:localhost:32400 remote@remote/{print \$2}')"

L'échappement pourrait encore nécessiter quelques ajustements (je ne l'ai pas testé).

3
Jakuje