Background (nohup * &) SSH command block possible?


 
Thread Tools Search this Thread
Top Forums Programming Background (nohup * &) SSH command block possible?
# 1  
Old 04-26-2012
Error Background (nohup * &) SSH command block possible?

Hello,
I am trying to find a way to send several sequential commands via SSH to a remote box in a single command.
Thoughts so far:

1) Can I put them into a function and call the function within the ssh command?

e.g.
Code:
ssh <targetserver> $(functionx)

No - then it calls the function in the shell on the target and does not recognised it.

2) Can I use a command block?

e.g.
Code:
ssh <targetserver> << EOF
echo 1
echo 2
date
EOF

Hmmm - maybe, but I get these messages:
Code:
"Pseudo-terminal will not be allocated because stdin is not a terminal"
(and on target)
"Warning: no access to tty (Bad file descriptor).
Thus no job control in this shell."

Actually then is does run the commands BUT I'm not sure it's solid.
my final target is that I want to run this whole command in the background --- when I try and do this with nohup I still see these errors
E.g.
Code:
nohup ssh <targetserver> << EOF > <log> &
echo 1
echo 2
date
EOF

Code:
"Pseudo-terminal will not be allocated because stdin is not a terminal"
(and on target)
"Warning: no access to tty (Bad file descriptor).
Thus no job control in this shell."

3) Create a shell script on the target and call that...
this option does work but I really want to find a way to centralise this script so that I don't have to stick the second script on every server I want to connect to.


I think it's quite an interesting one - can anyone advise on the best possible method for generating a set of commands to execute on a remote box via ssh; but with one SSH command?

NB It cannot be several SSH commands as I need this to both be run in the background and also for the commands to be sequential.

Thanks in advance!
Jamie Neilan

Last edited by Corona688; 04-26-2012 at 05:12 PM..
# 2  
Old 04-26-2012
To keep the forums high quality for all users, please take the time to format your posts correctly.

First of all, use Code Tags when you post any code or data samples so others can easily read your code. You can easily do this by highlighting your code and then clicking on the # in the editing menu. (You can also type code tags [code] and [/code] by hand.)



Second, avoid adding color or different fonts and font size to your posts. Selective use of color to highlight a single word or phrase can be useful at times, but using color, in general, makes the forums harder to read, especially bright colors like red.

Third, be careful when you cut-and-paste, edit any odd characters and make sure all links are working property.

Thank You.

The UNIX and Linux Forums
# 3  
Old 04-26-2012
Quote:
Originally Posted by doonan_79
Hello,
I am trying to find a way to send several sequential commands via SSH to a remote box in a single command.
Thoughts so far:

1) Can I put them into a function and call the function within the ssh command?

e.g.
Code:
ssh <targetserver> $(functionx)

That would call the function locally, and feed its output into ssh.

Still, you cannot, since functions aren't exported across ssh calls. It's like running a fresh script. It knows nothing about your functions or environment...

Quote:
2) Can I use a command block?
Yes. You won't be able to use standard input for anything else, though.
Quote:
I get these messages:
Code:
"Pseudo-terminal will not be allocated because stdin is not a terminal"
(and on target)
"Warning: no access to tty (Bad file descriptor).
Thus no job control in this shell."

It means what it says. stdin is not a terminal, it's a here-document, so it doesn't allocate a pseudo-tty.

Other than that, there's nothing wrong with it.
Quote:
Actually then is does run the commands BUT I'm not sure it's solid.
Nothing's actually going wrong. The shell's just complaining since its input isn't an interactive terminal.
Quote:
my final target is that I want to run this whole command in the background --- when I try and do this with nohup I still see these errors
E.g.
Code:
nohup ssh <targetserver> << EOF > <log> &
echo 1
echo 2
date
EOF

They're not errors, they're warnings.

I think you can avoid the warnings by running the shell in a manner so it doesn't expect stdin to be a terminal.

Code:
ssh username@host /bin/sh -s <<EOF
...
EOF

Quote:
I think it's quite an interesting one - can anyone advise on the best possible method for generating a set of commands to execute on a remote box via ssh; but with one SSH command?
If you want the deluxe version, the one I tend to use:

Code:
ssh username@host exec /usr/bin/env sh -s "arg1" "arg2" "arg3" <<"EOF"
echo "First argument is $1"
echo "Second argument is $2"
echo "Third argument is $3"
EOF

Running sh in this way should be quite safe, and using <<"EOF" makes sure nothing gets substituted into the here document, no substitution at all. The only way you can transfer in variables is with the "arg1" "arg2" "arg3" there, which become $1 $2 $3 ...
This User Gave Thanks to Corona688 For This Post:
# 4  
Old 04-27-2012
A quick, and wonderful response - thank you - one more thing though. How would you run your final version there in the background (so if it's in a script that script can continue on while that code runs?)

Perhaps like this?
Code:
nohup ssh username@host exec /usr/bin/env sh -s "arg1" "arg2" "arg3" <<"EOF" > logfile.log &
echo "First argument is $1"
echo "Second argument is $2"
echo "Third argument is $3"
EOF

Not sure if I really need the nohup and the ampersand ...... have tried the ssh -f option to fork to background but doesn't seem to like that..

---------- Post updated at 21:54 ---------- Previous update was at 21:45 ----------

In Fact I think I have it! Returning to my post syntax updating with your input I have running - awesome!

Code:
nohup ssh -q <targetserver> exec /usr/bin/ksh -s << EOF > <log> &
echo 1
echo 2
date
EOF

Works a treat! No output to my STOUD/screen (thanks to -q option on ssh) and the log is generated locally from commands passed to the remote box using an code block - absolute genuis - many thanks Corona688. I am indebted to you.

---------- Post updated 27-04-12 at 10:19 ---------- Previous update was 26-04-12 at 21:54 ----------

*UPDATE*

I have found now that while this works for simple commands I include a FOR loop within the EOF code-block and it errors as follows (below) - any ideas??

Code:
nohup ssh -q <targetserver> exec /usr/bin/ksh -s << EOF > <log> &
echo 1
echo 2
date
testvar="a b c"
for i in ${testvar}
do
 echo $i
done
EOF

Error is :
Code:
/usr/bin/ksh: syntax error at line X : `newline or ;' unexpected

---------- Post updated at 10:32 ---------- Previous update was at 10:19 ----------

Ah-ha! You can use $() to execute code in a here document. OK so here is ht working fix to that:

Code:
nohup ssh -q <targetserver> exec /usr/bin/ksh -s << EOF > <log> &
echo 1
echo 2
date
$(
testvar="a b c"
for i in ${testvar}
do
 echo $i
done
)
EOF

This User Gave Thanks to doonan_79 For This Post:
# 5  
Old 04-27-2012
Instead of nohup consider at which does all of the exec, etc., for you:
Code:
ssh <remotenode> ' at -k now <<!
echo 1
echo 2
! '

This runs the list of commands using ksh.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Sudo ssh with command running in background

I am trying to run a command. This is one of my attempts: for i in fileservera; do ssh -t $i 'sudo ls /';doneThis works, and I see the directories. However, what I want to do now is start a process on the remote server such as /usr/bin/connectproc -standalonesudo /usr/bin/connectproc... (1 Reply)
Discussion started by: newbie2010
1 Replies

2. UNIX for Dummies Questions & Answers

Difference between & and nohup &

Hi All, Can anyone please help me understanding what the difference between the below two? 1. script.sh & 2. nohup script.sh & (2 Replies)
Discussion started by: Anupam_Halder
2 Replies

3. UNIX for Dummies Questions & Answers

How do I send output of a background process to a file other than nohup.out?

I have a question. I will be running a background process using nohup and & command at end. I want to send output to a file say myprocess.out. So will this command work? nohup myprocess.ksh > myprocess.out & Thanks in advance guys !!! :) (3 Replies)
Discussion started by: vx04
3 Replies

4. Shell Programming and Scripting

Nohup and background jobs

Hi All, Can someone help me in knowing the exact difference between nohup and &. The definition is quite clear but i only want to know if i run my job using & and in between i hung up my terminal. (10 Replies)
Discussion started by: Uinx_addic
10 Replies

5. Shell Programming and Scripting

How to stop nohup which is working background

Please I have run a background script using nohup please tell me way to stop this. Thanks in Advance (4 Replies)
Discussion started by: mumakhij
4 Replies

6. Shell Programming and Scripting

how do i execute nohup and background job inside the korn script for db2

load_cursor_stmt() { ls /db/admin/ddl/rmn01000/load_cursor*.sql|while read file do echo "${file}" `nohup db2 -tvf "$file" \&` done }Error: ------- /admin/ddl/rmn01000/load_cursor5.sql /db/admin/ddl/rmn01000/load_cursor6.sql + read file + echo... (3 Replies)
Discussion started by: Hangman2
3 Replies

7. Shell Programming and Scripting

ssh -t and nohup

I have a fairly simple script like so: nohup java -jar program.jar >> log 2>&1 & echo $! > pidfile This works great when using ssh server "script.sh" but not when using ssh -t server "script.sh" The solution I came up with was to call sleep after recording the child pid. My guess at the... (2 Replies)
Discussion started by: croachrose
2 Replies

8. UNIX and Linux Applications

nohup and & versus functions

when i have a function definition and function call in my script , i am unable to run my script in background with nohup.. Help me out please..... (3 Replies)
Discussion started by: venugopalsmartb
3 Replies

9. Shell Programming and Scripting

ssh a nohup command

I have a script I'm creating to spawn netcat listeners on a remote server for copying files at high speeds. The issue I'm running into is that after running the "nohup nc -l -p 12345 | tar -xvf - &" commands I can't get the remote shell to terminate. I'm not sure if this is working as intended or... (2 Replies)
Discussion started by: headcr4sh
2 Replies

10. UNIX for Advanced & Expert Users

nohup and background process

What is the difference between running a process using nohup and running a process in background ? Please explain (6 Replies)
Discussion started by: srksn
6 Replies
Login or Register to Ask a Question