SSH executado a partir de Perl obtém SIGSTOP instantaneamente

1

Eu tenho algum script perl que executa alguns comandos no servidor gerrit remoto via SSH. Está rodando em uma máquina virtual do Debian lenny. Durante vários monthes foi executado da seguinte maneira:

./script.pl &>~/script.log &
disown

e tudo estava funcionando bem. No entanto, a partir da última sexta-feira, esse script e seus processos filhos ("sh -c ssh ...." e "ssh ...") são interrompidos em algum momento exatamente durante a execução de comandos remotos. "ps x" mostra o status T (sTopado) para todos eles. Enviar SIGCONT não ajuda muito. Eles recebem SIGSTOP imediatamente depois disso.

Não consigo ver esse comportamento com fio ao executar este script de forma interativa (agora ele funciona na tela sem problemas).

Eu tentei usar strace para investigar o que acontece, mas não consigo detectar esse bug, pois ele funciona bem quando iniciado interativamente. Eu não sei quem pode enviar o SIGSTOP e não sei qual processo exatamente recebe esse sinal primeiro. Posso descobrir essa informação de alguma forma? Como essa questão pode ser investigada?

P.S. Meu escopo de responsabilidade é limitado para monitorar e reiniciar (se necessário) esse script. Não sei quais alterações foram feitas neste servidor ou no servidor gerrit remoto por pessoas responsáveis.

    
por VestniK 08.08.2011 / 06:46

1 resposta

1

Depois de mais experimentos com strace (obrigado pelo comentário de womble), descobri que meu processo ssh recusa o SIGTTIN e isso causa o problema que enfrentei. O primeiro link do google para o "ssh SIGTTIN" esclarece a situação: link seção "7.4.5.6. Plano de fundo de um comando remoto":

ssh provides the -n command-line option to get around this problem. It redirects standard input to come from /dev/null, which prevents ssh from blocking for input.

    
por 08.08.2011 / 15:16