运行 bash 远程 linux 机器上的 java 文件并将其保存在后台

Run bash file on remote linux machine with java and keep it in background

我在远程 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("su - oracle -c './ben.sh'");

我希望脚本仍然 运行 在远程 linux 机器上并且我想在执行上面的命令后立即关闭 ssh 连接,而不干扰脚本。

我想如果我像这样在这个命令的末尾加上一个 &:

sshshell.execute("su - oracle -c './ben.sh' &");

但 java 程序仍然卡住并等待脚本完成

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

我有哪些选择?

在后台使用nohup&来运行脚本。

sshshell.execute("nohup su - oracle -c './ben.sh' &");

Nohup 是“No Hangups”的缩写。Nohup 是一个补充命令,告诉 Linux 系统一旦启动就不要停止另一个命令。这意味着它'我将保持 运行ning 直到它完成,即使启动它的用户注销。nohup 的语法如下:

nohup sh your-script.sh &

末尾的 & 将命令移至后台,释放您正在使用的终端。

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

nohup cmd &

或者您可以使用 Disown 将其从子进程中分离出来。

cmd & disown