gpt4 book ai didi

linux - Jsch 使用组合尾命令运行远程 jar 无法正常工作

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:19:40 25 4
gpt4 key购买 nike

我正在尝试使用 JSch 通过 SSH 在远程 Linux 服务器(在不同端口上)上运行许多独立的 spring boot jar。我在命令中使用 tail,因为我需要 tomcat 服务器日志。当我启动运行独立 jar 的服务时,一些 jar 没有运行。

这是我用来运行独立 jar 的示例脚本:

nohup java -jar foo.jar --server.port=10000 > log.txt 2> errors.txt & tail -f log.txt

这是我的代码:

StringBuilder sb = new StringBuilder();
Session session = null;
ChannelExec channel = null;
InputStreamReader isr = null;
BufferedReader br = null;
try {
String command1 = "nohup java -jar " + jarFileDir + "/" + jarFileName + " --server.port=" + port
+ " > " + jarFileDir + "/log.txt 2> " + jarFileDir + "/errors.txt & tail -f " + jarFileDir + "/log.txt";

java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
JSch jsch = new JSch();
session = jsch.getSession(username, ip, port);
session.setPassword(password);
session.setConfig(config);
session.connect();

channel = (ChannelExec)session.openChannel("exec");
channel.setPty(true);
isr = new InputStreamReader(channel.getInputStream());
br = new BufferedReader(isr);
channel.setCommand(command1);
channel.connect();

String msg;
while ((msg = br.readLine()) != null) {
//jar logs is being readed and processed here
}

} catch (Exception e) {
//handle exception
} finally {
//close all the connections
if (br != null) br.close();
if (isr != null) isr.close();
if (channel != null) channel.disconnect();
if (session != null) session.disconnect();
}

有关问题的日志在这里:

tail: 无法打开 'log.txt' 进行读取:没有那个文件或目录尾部:没有文件剩余

最佳答案

nohup java -jar foo.jar --server.port=10000 > log.txt 2> errors.txt & tail -f log.txt

您在这里运行两个单独的命令:

nohup java -jar foo.jar --server.port=10000 > log.txt 2> errors.txt
tail -f log.txt

这有一个竞争条件。在第一个命令有机会创建文件之前,第二个命令可以启动并尝试打开 log.txt

解决方法是确保在启动 tail 命令之前创建 log.txt。你可以这样做:

touch log.txt
nohup java -jar foo.jar --server.port=10000 > log.txt 2> errors.txt &
tail -f log.txt

或者作为一行:

touch log.txt; nohup java etc... & tail -f log.txt

关于linux - Jsch 使用组合尾命令运行远程 jar 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45352928/

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