运行 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
我在远程 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