2
我需要通过sshj执行一个shell脚本,并断开连接而不必等待脚本完成。脚本可能需要很长时间才能完成,所以我将创建额外的Java代码来定期检查脚本的结果。如何在不等待shell脚本完成的情况下断开sshj会话?sshj使用nohup执行脚本
我需要通过sshj执行一个shell脚本,并断开连接而不必等待脚本完成。脚本可能需要很长时间才能完成,所以我将创建额外的Java代码来定期检查脚本的结果。如何在不等待shell脚本完成的情况下断开sshj会话?sshj使用nohup执行脚本
用&
结束您的命令。例如:
nohup /usr/bin/longRunningProcess &
一旦提交命令(例如,提交命令,然后调用Command.join()
),你可以断开,并longRunningProcess
将继续在后台运行。另一个需要担心的是命令的输出。您必须在其他地方重定向stdout
和stderr
,例如/dev/null
的文件。因此,该命令将是这个样子:
nohup /usr/bin/longRunningProcess > /dev/null 2>&1 &
和Java代码将是这样的:
SSHClient client = ...
Session session = ...
Command command = session.exec(yourCommand);
// Wait for command to be submitted
command.join();
// Do some error checking by checking command.getExitStatus()
...
// Disconnect
session.close();
client.close();