使用java在远程linux机器上运行bash文件,并将其保留在后台
我在远程linux机器上有一个shell脚本,其中包含以下内容:使用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
#!/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