gpt4 book ai didi

java - jsch & nohup - 程序没有启动

转载 作者:行者123 更新时间:2023-11-30 11:41:05 28 4
gpt4 key购买 nike

我想使用 jsch 和 'nohup with &' 命令在后台启动我的程序。这是我的代码:

    String command = "sudo nohup -jar [path to my jar] &";
try{
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
JSch jsch = new JSch();
Session session = jsch.getSession(user, host, 22);
session.setPassword(password);
session.setConfig(config);
session.connect();
System.out.println("Connected");

Channel channel = session.openChannel("exec");
((ChannelExec)channel).setPty(true);
((ChannelExec)channel).setCommand(command);
channel.setInputStream(null);
((ChannelExec)channel).setErrStream(System.err);

InputStream in = channel.getInputStream();
channel.connect();
byte[] tmp = new byte[1024];
while (true) {
while (in.available() > 0) {
int i = in.read(tmp, 0, 1024);
if (i < 0) {
break;
}
System.out.print(new String(tmp, 0, i));
}

if (channel.isClosed()) {
System.out.println("exit-status: " + channel.getExitStatus());
break;
}

try {
Thread.sleep(1000);
} catch (Exception ee) {
}
}
channel.disconnect();
session.disconnect();
System.out.println("DONE");
} catch(Exception e) {
e.printStackTrace();
}

作为我得到的输出:

Connected
exit-status: 0
DONE

但是程序没有启动。没有 '&' 它有效,但没有它。同样的情况是当我将 nohup 命令放入 .sh 脚本然后运行它时。有什么想法可以解决这个问题吗?

提前致谢!

最佳答案

3年后...

我最近遇到了同样的问题。我通过使用解决了它:

((ChannelExec)channel).setPty(false);

并通过重定向输出流。在我看来,这取决于正在执行的程序。我有一个不同的脚本,它只是 hibernate 并将日期打印到文件中,它不需要任何重定向。它也独立于 JSch。使用命令行ssh同样存在这个问题。

我实际想要执行的命令需要将其输出流从 stdout 重定向。如果单独重定向 stdout 不起作用,则重定向错误流并使用 <&- 关闭输入流可能有帮助。

关于java - jsch & nohup - 程序没有启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12408243/

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