Como matar um comando iniciado por SSH - a conexão SSH perdida

4

Se eu usar

timeout 10 ssh -n -o BatchMode=yes 1.1.1.1 'sleep 20' > 1.1.1.1.txt 2>&1 &

Para fornecer um comando remoto em um servidor, e eu mato a conexão SSH após 10 segundos, posso ver que o sleep 20 ainda está em execução no servidor, mas não há conexão SSH.

Como posso matar o comando remoto após um tempo limite, digamos 10 segundos?

A máquina remota é AIX 6.1 (ou SLES) e nenhum pacote está disponível para "timeout". Meu cliente é o Ubuntu 10.03.

    
por LanceBaynes 20.08.2011 / 17:11

1 resposta

5

Supondo que seu servidor remoto tenha um shell compatível com POSIX, o seguinte deve funcionar:

ssh ...options... 'command & pid=$!; sleep 20; kill $pid'

De fato, o padrão POSIX informa sobre $! :

Expands to the decimal process ID of the most recent background command (see Lists) executed from the current shell. (For example, background commands executed from subshells do not affect the value of "$!" in the current shell environment.) For a pipeline, the process ID is that of the last command in the pipeline.

Se o sistema remoto tiver controle de trabalho, você poderá reduzi-lo desta maneira:

ssh ...options... 'command & sleep 20; kill %1'
    
por 20.08.2011 / 22:05

Tags