前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于java远程调用tomcat脚本的问题

关于java远程调用tomcat脚本的问题

作者头像
简单的程序员
修改2021-03-14 19:52:10
1K0
修改2021-03-14 19:52:10
举报
文章被收录于专栏:奕仁专栏奕仁专栏

背景:这两天搞了一下java的跨系统远程调用,遇到了几个问题,其中最让我头疼的就是下面那个,然而最后也解决了,故写下来总结一下

Neither the JAVA_HOME nor the JRE_HOME environment variable is defined

我是用的第三方连接远程系统,即ganymed-ssh2

代码语言:txt
复制
<dependency>
	<groupId>ch.ethz.ganymed</groupId>
	<artifactId>ganymed-ssh2</artifactId>
	<version>build210</version>
</dependency>

在我编写完代码之后,运行出现了好几个问题,比如利用java运行远程服务器的脚本出现not permission>学过编程的人肯定都知道这是没有权限,给它个权限就好了,即 chmod 777 /data/xxx(即路径). 说一下调用/tomcat/bin/startup.sh 出现Neither the JAVA_HOME nor the JRE_HOME environment variable is defined,为什么呢?大概是因为用java远程登录不能获取到环境变量吧!

然后贴上java连接的代码

代码语言:txt
复制
import ch.ethz.ssh2.ChannelCondition;
import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler;
import lombok.extern.slf4j.Slf4j; 
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.Charset;


@Slf4j
public class ServerUtils {

    private Connection conn;
    private String ip;
    private String username;
    private String password;
    private static final int TIME_OUT = 3;

    private static final Logger LOGGER = LoggerFactory.getLogger(ServerUtils.class);
    /***
     * 分割  获取PID
     */
    private static final String SPLIT = "     ";



    /**
     * 构造函数
     */
    public ServerUtils(ServerEnum serverEnum) {
        this.ip = serverEnum.getIp();
        this.username = serverEnum.getName();
        this.password = serverEnum.getPassword();
    }


    /**
     * 登录
     * @throws IOException
     */
    private boolean login() throws IOException {
        conn = new Connection(ip);
        conn.connect();
        return conn.authenticateWithPassword(username, password);
    } 
 
    public static void main(String[] args) throws Exception { 
        new ServerUtils(ServerEnum.test2).start(ServerEnum.test2, ProjectEnum.ent); 
    }
}

解决办法:

在服务器上编写一个脚本,手动设定它的jdk环境变量,创建一个脚本tomcat.sh,编写如下:

代码语言:txt
复制
#! /bin/bash
TOMCAT_NAME=tomcat-crm
PROJECT_PATH=/pm/server/$TOMCAT_NAME
DATE=`date +%Y-%m-%d--%H-%M-%S`
###设置java变量
export JAVA_HOME=/data/server/jdk1.8.0_181
./startup.sh 

在调用java -jar 进行启动springboot项目的时候也发现了此类问题,尽管加上export JAVA_HOME=xxxx也没什么用, 在这里加入下面的命令完美解决springboot远程启动的问题:

代码语言:txt
复制
**source /etc/profile;nohup java -jar /mnt/test.jar &  **
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-02-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
    • 解决办法:
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档