Como matar o script executado através do SSH quando o script bash local é eliminado [duplicado]

0

Eu tenho o script a seguir chamado exec.sh , que executa um script python remotamente no node01:

#!/bin/bash
ssh node01 "python2.7 /home/user/run.py"

Se eu matar exec.sh usando CTRL+C ou kill -9 , então o script python que eu estava executando através do ssh ainda está sendo executado no node01.

O que eu quero é matar o processo que eu estava rodando no node01 sempre que eu matar o script exec.sh .

    
por user243702 27.07.2017 / 11:15

1 resposta

1

Isso ocorre porque o exec.sh é local e executa um comando em uma máquina remota. Então, se você matar o processo local, o processo remoto ainda será executado.

Para conseguir o que você quer, você precisa do exec.sh para capturar o SIGNAL de CTRL + C, e antes de se matar para matar o comando no host remoto.

function trap_ctrlc ()
{
# kill the remote process
  ssh user@pass "pkill -9 python"

  exit 2 
}

# initialise trap to call trap_ctrlc function
# when signal 2 (SIGINT) is received
trap "trap_ctrlc" 2

your script here

Cuidado: o python é um processo muito genérico para matar. É melhor salvar o ID do processo ao iniciá-lo e, em seguida, matá-lo especificamente por ID

    
por 27.07.2017 / 13:04