我试图通过SSH与SSH在远程linux服务器(在不同的端口上)运行一些独立的spring boot jar。我在命令上使用tail,因为我需要tomcat服务器日志。当我启动运行独立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'进行阅读:没有这样的文件或目录 尾巴:没有剩余文件
答案 0 :(得分:0)
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
答案 1 :(得分:0)
提到下面提到的命令,并且我在命令末尾添加了> / dev / null 2>&1&以使用jsch运行后台进程
String command1 =“ nohup java -jar” + jarFileDir +“ /” + jarFileName +“ --server.port =” +端口+“>” + jarFileDir +“ /log.txt 2>” + jarFileDir +“ /errors.txt和tail -f“ + jarFileDir +” /log.txt> / dev / null 2>&1&“;