ssh连接关闭后在后台通过java执行bash脚本

ssh连接关闭后在后台通过java执行bash脚本,java,linux,bash,ssh,parallel-processing,Java,Linux,Bash,Ssh,Parallel Processing,我正在使用java在远程linux机器上执行一个简单的bash脚本 名为“shortoracle.bash”的bash脚本具有以下脚本: #!/bin/sh runsql() { i="$1" end=$((SECONDS+360)) SECONDS=0 while (( SECONDS < end )); do echo "INSERT into table_$i (col1) values (CURRENT_TIMESTAMP);" | sqlplus u

我正在使用java在远程linux机器上执行一个简单的bash脚本

名为“shortoracle.bash”的bash脚本具有以下脚本:

#!/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
ssh成功地执行了脚本

我希望在超时2秒(第二个参数)后终止ssh连接,但为了让脚本在后台继续正常运行(因此我认为是nohup),它不会发生:

在我终止sshconnection的2秒钟后,bash程序停止工作:

  • 10个连接中只有3个打开

  • 不再发生插入

如果我给连接一个更长的超时时间,一切都很顺利,但我不想挂断这个特定的连接,我需要继续程序


我做错了什么?

您应该在命令后添加
&
,即

sshconnection.execute(“nohupsu-oracle-c./shortoracle.bash'&”,2000)

因为nohup本身在关闭SSH时会断开连接 连接。使用
&
可以在后台运行“nohup”本身,从而允许它在关闭SSH连接后继续运行


希望这对你有帮助

这是我的java程序建立到远程服务器的ssh连接的方法,sshcontext,如果它对您有任何意义的话。是的,但我认为这不是问题所在,是吗?问题不在于ssh执行器,它工作得很好,可以将其视为在远程机器上连接和执行脚本的抽象方法。&的顺序正确吗?,我应该先做su-oracle,理想情况下我会这样做:
su-oracle-c'nohup./shortoracle.bash&
以确保它只在后台为用户运行
oracle
。让我知道如果这对你有效,我会相应地更新答案:)(我不能在atm本地测试它)它一定是在脚本的开头使用了nohup,它刚才疯了,然后我会这样写:
nohup su-oracle-c'/shortoracle.bash'&
仍然不工作,当2000年过去时,它只是随着插入而停止。。。
sshconnection.execute("nohup su - oracle -c './shortoracle.bash'",2000);