gpt4 book ai didi

linux - 使用java启动远程进程

转载 作者:IT王子 更新时间:2023-10-29 00:57:21 24 4
gpt4 key购买 nike

机器 A 使用 sshpass 连接到远程机器 B,而远程机器 B 不直接向 root 提供 ssh 访问权限,所以我通过 user 连接到它并使用 sudo 并且当 user 执行 sudo su 时我也禁用了密码.当命令像 ls -lrt/some/dir 这样简单时,我得到命令的正确输出但是当我在远程机器上启动服务器/shell 脚本时(服务器不需要时间,而脚本需要 1 分钟运行)显示输出但 bash 没有恢复正常(即看起来它正在做一些工作但我知道服务器已经启动/脚本已经完成)。

使用的命令:

sshpass -p 'password' ssh -o StrictHostKeyChecking=no user@192.168.0.3 "sudo ls /dev/ttyUSB*"

以上工作正常,我得到了输出并返回了 bash,因此我可以编写更多命令并执行其他操作。

sshpass -p 'password' ssh -o StrictHostKeyChecking=no user@192.168.0.3 "sudo /root/path/server &"

sshpass -p 'password' ssh -o StrictHostKeyChecking=no user@192.168.0.3 "sudo /root/path/to/script/scriptTakes1Minute param1 param2"

但是,上面的方法并没有像预期的那样工作。看起来它正在工作,但它没有返回 bash,因此我无法进一步编写命令。

我无法共享脚本或服务器程序,因为它是公司的代码。但服务器代码使用 UNIX 数据报套接字进行通信。

/* Creating a UNIX datagram socket for Server Application */
if ((sock = socket(AF_UNIX, SOCK_DGRAM, 0)) < 0)
{
perror("server: socket");
exit(1);
}

编辑 1:

当我尝试过

sshpass -p 'password' ssh -o StrictHostKeyChecking=no user@192.168.0.3 "sudo /root/path/server >/dev/null &2>1 </dev/null &"

服务器程序正确启动,但脚本没有按预期工作,也没有返回 bash,但是当我按下 ENTER 时,bash 返回了,我知道这意味着什么,但不不知道是什么。

编辑 2:

我无法将输出重定向到文件,因为我不知道该命令总共需要多少时间才能运行,可能需要一分钟或几分钟。

编辑 3:

我发现了一些很有帮助的东西(我猜)。保留在该机器 B 上的脚本在后台创建了几个进程,因此 sshpass 不会返回,直到所有这些后台进程都从机器 B 手动终止。一旦这些程序被终止,我们就会得到该输出以及 bash 返回。

编辑 4:

该脚本创建 8 个在后台运行的 ppp session 。

最佳答案

只需再使用一行代码 process.waitFor(); 即可解决您的问题:-

 process = Runtime.getRuntime().exec(SHELL_COMMAND);
process.waitFor();// add this line to complete execution of your shell command
System.out.println("LLLLLLLOOOOOOOOOKKKKKKKK started process");

关于linux - 使用java启动远程进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49166864/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com