Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java在远程linux机器上运行bash文件,并将其保留在后台_Java_Linux_Bash_Ssh_Connection - Fatal编程技术网

使用java在远程linux机器上运行bash文件,并将其保留在后台

使用java在远程linux机器上运行bash文件,并将其保留在后台,java,linux,bash,ssh,connection,Java,Linux,Bash,Ssh,Connection,我在远程linux机器上有一个shell脚本,其中包含以下内容: #!/bin/sh for i in $(seq 1 10); do echo "CREATE TABLE ben$i (id NUMBER NOT NULL); ! sleep 30 select * from ben$i; ! sleep 30 DROP TABLE ben$i;" | sqlplus system/password & done wait 这个脚本的名称是ben.sh

我在远程linux机器上有一个shell脚本,其中包含以下内容:

#!/bin/sh
for i in $(seq 1 10);
do
   echo "CREATE TABLE ben$i (id NUMBER NOT NULL);
   ! sleep 30
   select * from ben$i;
   ! sleep 30
   DROP TABLE ben$i;" | sqlplus system/password &
done
wait
这个脚本的名称是ben.sh

在java中,我希望执行这个脚本,并让脚本像在后台那样执行

sshshell.execute("nohup su - oracle -c './ben.sh' &");
我有一个成功执行脚本的命令:

sshshell.execute("su - oracle -c './ben.sh'");
我希望脚本仍然在远程linux机器上运行,并且在执行上述命令后立即关闭ssh连接,而不干扰脚本

我想如果我在这个命令的末尾加一个&如下所示:

sshshell.execute("su - oracle -c './ben.sh' &");
但是java程序仍然卡住,等待脚本完成

非常重要的注意:我不想使用线程或任何额外的ssh连接。

我的选项是什么?

使用和
&
在后台运行脚本

sshshell.execute("nohup su - oracle -c './ben.sh' &");
Nohup
是“无挂断”的缩写。
Nohup
是一个补充命令,它告诉Linux系统在另一个命令启动后不要停止它。这意味着它将一直运行,直到它完成为止,即使启动它的用户注销。
Nohup
的语法如下:

nohup sh your-script.sh &

最后的
&
将命令移到后台,释放您正在使用的终端。

因此,您可以使用Nohup或Disown命令。使用Nohup系统将避免退出信号传播到子进程

nohup cmd &
或者您可以使用Disown将其从子进程中断开

cmd & disown