I am using java to execute a simple bash script on a remote linux machine.
The bash script named "shortoracle.bash" have this script:
#!/bin/sh
runsql() {
i="$1"
end=$((SECONDS+360))
SECONDS=0
while (( SECONDS < end )); do
echo "INSERT into table_$i (col1) values (CURRENT_TIMESTAMP);" | sqlplus username/password
sleep 1
done
}
for i in $(seq 1 10); do
echo "DROP TABLE table_$i;" | sqlplus username/password
echo "CREATE TABLE table_$i (col1 TIMESTAMP WITH TIME ZONE);" | sqlplus username/password
runsql $i &
done
wait
Simply speaking: create 10 parallel connection that execute queries for 360 seconds.
From my java program i execute the following command:
sshconnection.execute("nohup su - oracle -c './shortoracle.bash'",2000);
The ssh executes the script successfully.
I want,after a timeout of 2 seconds (the second param) to terminate the ssh connection, but for the script to continue to run properly in the background (therefore the nohup, or so i thought), it's not happening:
After 2 seconds when i terminate the sshconnection, the bash program just stops working:
Only 3 of the 10 connections are open.
No more inserts happening.
If i give the connection a longer timeout, all is going well, but i don't want to hangup on this specific connection, i need to move on with the program.
What am i doing wrong here?
You should add
&
after your command, i.e.sshconnection.execute("nohup su - oracle -c './shortoracle.bash' &",2000);
Since nohup itself will otherwise get disconnected when you close the SSH connection. With
&
you run 'nohup' itself in the background and therefore allow it to continue running after you close the SSH connection.Hope this helps you out!