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

标签 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。

在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 系统在启动另一个命令后不要停止它。这意味着即使启动它的用户注销,它也会继续运行直到完成。nohup 的语法如下:

nohup sh your-script.sh &

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

关于java - 使用java在远程Linux机器上运行bash文件并将其保留在后台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58971530/

相关文章:

java - 使用 docker stack 部署时 Hazelcast 节点未发现其他节点

linux - Linux 中每个进程的编程资源监控

linux - 使用静态/固定 IP 接收 DNS

linux - 顶部哪里缺少内存?

linux - 从日志文件中搜索并打印特定数字

java - Esper 基于客户的查询非常适合多个客户

java - SimpleDateFormat 解析时忽略月份

java - 每小时 30 分钟后运行的 Cron 表达式

bash - 如何获取 tput smcup/rmcup 设置的屏幕状态?

Bash 终端在运行脚本后关闭