java - 使用 java 在远程 linux 机器上运行 bash 文件并将其保留在后台
问题描述
我在远程 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 - 我使用 itextpdf 在 pdf 中生成了一些注释,但是当 acrobat reader 打开 pdf 时无法搜索到注释
- kubectl - 未找到 eksctl 管理的 CloudFormation 堆栈 > 错误:为集群加载 VPC 规范,
- python - 我如何在 Atom 中获取 python Discord 模块?
- javascript - 如何将 DATA 变量从 JS 导入新的 VUE3 组件,然后在 html DOM 中打印数据?:)
- docker - 云 NAT 配置失败?
- python - 制作python包
- python - 如何在 python 中使用文本到语音转换器远程播放声音
- ios - Flutter后台服务不工作ios
- excel - Excel 在 csv 文件上添加不需要的引号
- reactjs - React Query - 为什么我的分页查询没有被触发?