O comando SSH remoto trava, mas somente quando executado através de Jenkins

2

Disclaimer: Eu sou um pouco novo para a comunidade, por favor, seja gentil:)

Estou tendo um problema de SSH que simplesmente não consigo explicar. Como pano de fundo, aqui está o problema que estou resolvendo:

There are several disparate Java services that existing within the environment that need to be deployed via a common interface. Logging of these services must be directed to a syslog facility. The common interface must be accessible via the command line and via the Jenkins GUI.

Quando comecei a ver problemas, adicionei o redirecionamento ao syslog. Se eu remover o redirecionamento do syslog, tudo funcionará bem. Aqui está um trecho de código que é chamado para executar os processos Java (limpo para facilitar a leitura):

/bin/java myJavaProgram -DvariousFlags=true &> >(logger -p local3.info -t "my prefix") 2>&1 &

Aqui é onde minha mente fica um pouco confusa - se eu executar o comando que chama esses scripts do servidor no qual o Jenkins está como usuário do Jenkins, o comando funciona. Se eu passar pela GUI do Jenkins, o trabalho simplesmente será interrompido. Estou executando o seguinte comando no Jenkins:

ssh -t [email protected] 'appctl restart all' 2>/dev/null

Confirmei com o sinalizador #!/bin/bash -x que o script está chegando ao fim. Quando eu corro com o ssh -vvv , o seguinte é a última linha de saída:

debug1: client_input_channel_req: channel 0 rtype exit-status reply 0

Alguma idéia sobre para onde ir a partir daqui? Existe uma maneira melhor de realizar o recurso de syslog? Há algo de errado com meu encanamento?

    
por cerberus 09.02.2017 / 15:51

2 respostas

3

O registrador provavelmente não entra no segundo plano, então o SSH acha que você ainda tem um processo aberto e não fecha a conexão.

Tente adicionar 2>/dev/null >/dev/null </dev/null dentro das aspas do comando appctl para que todas as alças de arquivo sejam fechadas no nível superior.

    
por 09.02.2017 / 16:57
3

A resposta de Jason está correta para a pergunta que fiz. No entanto, deixei de mencionar que queria manter a saída appctl no console do Jenkins.

Jason me incentivou a rever o redirecionamento. O que eu criei é isto:

ssh -t [email protected] 'appctl restart all 1>&2'

Parece que redirecionar stdout para stderr torna o SSH feliz ...

    
por 09.02.2017 / 17:53