笔者之前用java写了一个远程连接执行Linux命令的工具,之前的命令都可以正常执行,最近公司搭建了一个hadoop环境,但是当我
去执行hadoop命令的时候它却告诉我说:bash: hadoop: command not found
(但是xshell工具是可以执行的),报了这个错我就在网上百度了,我按照网上说的检查了etc\profile文件,没有问题,后来我又修改了一hadoop的配置文件,最后结果还是这样的,所以我觉得是我写的代码里面可能是却什么东西,代码如下:
package com.qykj.util;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler;
/**
@版本:V1.0
*/
public class XshellUtil {
// 代码执行-远程shell,8
/**
/**
@创建时间:2017-12-23 下午12:17:02
*/
public static String getCommondMsg(Connection conn,String commond,boolean isAuthenticated) throws IOException {
StringBuffer sb = new StringBuffer("");
if (isAuthenticated == false)
throw new IOException("Authentication failed.");
// 创建一个session
Session sess = conn.openSession();
// 执行linux命令
sess.execCommand(commond);
// 建立一个输入流
InputStream stdout = new StreamGobbler(sess.getStdout());
// 建立一个字节流
BufferedReader br = new BufferedReader(new InputStreamReader(stdout));
while (true) {
String line = br.readLine();
if (line == null)
break;
sb.append(line.trim() + "\n");
}
br.close();
stdout.close();
// 关闭session
sess.close();
return sb.toString();
}
/**
知道问题的麻烦告知。谢谢!
很多命令都用不到,常用的也就那么几种
应该是环境变量的问题,讲白了还是profile,你应该是配置了错误的路径
赞同楼上,PATH环境变量的可能性很大,你可以尝试传参数的时候,带上完整路径-fullpath,看看是否仍旧出错,排除一下。
另外配置完记得用source /etc/profile使配置文件在当前tty立即生效
远程执行很容易出这种问题。你最好在执行命令之前code里面设置一下环境变量。
应该不是代码的问题 看下环境配置错了没
可以加上etc/bin/命令 试试
package com.qykj.util; 改成ask.csdn.net.com
使用jsch这个框架,然后远程登陆,执行shell .和你用xshell是一样的
应该是java的环境变量设的不对,可以用绝对路径的试一下,然后修改一下环境变量设置
登录到linux机器,手动运行hadoop命令,看是否存在该命令,若不存在,就是环境变量的原因了