Remote SSH command hangs, but only when executed through Jenkins

8,066

Solution 1

Logger is likely not forking into to the background, so SSH thinks you still have a process open and doesn't close the connection.

Try adding 2>/dev/null >/dev/null </dev/null inside the quotes for your appctl command so that all the filehandles are closed at the top level.

Solution 2

Jason's answer is correct for the question I asked. However, I neglected to mention that I wanted to maintain the appctl output in the Jenkins console.

Jason prompted me to revisit the redirection. What I came up with is this:

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

Seems as though redirecting stdout to stderr makes SSH happy...

Share:
8,066

Related videos on Youtube

cerberus
Author by

cerberus

Updated on September 18, 2022

Comments

  • cerberus
    cerberus over 1 year

    Disclaimer: I'm a bit new to the community, please be gentle :)

    I'm having an SSH issue that I just can't seem to explain. As a bit of background, here's the problem that I'm solving:

    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.

    Where I started seeing problems was when I added redirection to the syslog. If I remove the syslog redirection, everything works fine. Here's a snippet of code that is called to execute the Java processes (scrubbed for readability):

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

    Here's where my mind gets a bit boggled - if I run the command that calls these scripts from the server that Jenkins is on as the Jenkins user, the command works. If I run it through the Jenkins GUI, the job just hangs. I'm running the following command in Jenkins:

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

    I've confirmed with the #!/bin/bash -x flag that the script is reaching its end. When I run with the ssh -vvv, the following is the last line of output:

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

    Any thoughts on where to go from here? Is there a better way of accomplishing the syslog feature? Is something wrong with my piping?

  • cerberus
    cerberus over 7 years
    Thanks! Marked your answer is correct. However, I wanted to maintain output in the Jenkins console. I posted my approach as an answer. Any idea why that solution worked? I've never redirected the standard outputs in that manner...
  • Jason Martin
    Jason Martin over 7 years
    Perhaps it was only STDERR causing the hang, so redirecting it to STDOUT solves it.