java远程执行linux命令? 10C

笔者之前用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;
/**

  • @类功能说明:
  • @类修改者:
  • @修改日期:
  • @修改说明:
  • @公司名称:青云科技
  • @作者:wxj
  • @Email:18772118541@163.com
  • @TEL:18772118541
  • @创建时间:2017-12-22 下午5:25:12
  • @版本:V1.0
    */
    public class XshellUtil {

    // 代码执行-远程shell,8
    /**

    • @方法说明:对获取的linux控制台上的数据进行解析,封装
    • @方法名称:urlCharset
    • @作者:wxj
    • @param str
    • @return
    • @创建时间:2017-12-23 下午2:48:16 */ public static List dataAnalysis(String str) { List list = new ArrayList(); String[] split = str.split("\n");//将字符串用回车符给分割成字符串数组 for (String string : split) { if (string.contains("+ ERROR: /")) {//判断是不是错误信息,如果里面包含+ ERROR: /就是错误信息 int start = string.indexOf("+ ERROR: /") + "+ ERROR: /".length(); String substring = string.substring(start, start + 1); //返回的错误信息里面有的没有任务价值的错误信息,这里我们通过判断+ ERROR: / //后面的一个字符是不是空格,如果是,那么这就是一条没用价值的,如果不是,我们就给它用一个list集合装进来,返回去 if (!substring.equals(" ")) { int end = string.indexOf("returned");//在这条错误信息的有一段是没有用的信息,我们需要把那一段给它截掉 //而它的分割点就是returned 前面的就是我们真正所需要的错误信息 substring = string.substring(start, end); if(!list.contains(substring)){ list.add(substring.trim()); } } } } return list; }

    /**

    • @方法说明:通过一个连接,用户名,密码,nikto的命令,获取这个命令在linuxdos窗口里面打印出来的东西
    • 用一个String 类型的东西返回去
    • @方法名称:getCommondMsg
    • @作者:wxj
    • @param conn
    • @param username
    • @param password
    • @param commond
    • @return
    • @throws IOException
    • @创建时间: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();
      }

    /**

    • @方法说明:创建一个linux的连接
    • @方法名称:getLinuxConnect
    • @作者:wxj
    • @param hostname
    • @return
    • @创建时间:2017-12-23 下午2:46:26 */ public static Connection getLinuxConnect(String hostname) { Connection conn = new Connection(hostname); return conn; } }

知道问题的麻烦告知。谢谢!

11个回答

很多命令都用不到,常用的也就那么几种

weixin_42617387
cs. 我也碰到一样的问题
大约一年之前 回复
qq_29707343
忆枫Ing 但是问题是我现在要用的这个它不能用撒,这主尴尬了
大约一年之前 回复

应该是环境变量的问题,讲白了还是profile,你应该是配置了错误的路径

qq_29707343
忆枫Ing 我仔细检查过hadoop和java环境的相关的配置的,都没有问题的!
大约一年之前 回复

赞同楼上,PATH环境变量的可能性很大,你可以尝试传参数的时候,带上完整路径-fullpath,看看是否仍旧出错,排除一下。

另外配置完记得用source /etc/profile使配置文件在当前tty立即生效

qq_29707343
忆枫Ing 你说的方法 我试过,谢谢!
大约一年之前 回复

远程执行很容易出这种问题。你最好在执行命令之前code里面设置一下环境变量。

应该不是代码的问题 看下环境配置错了没

可以加上etc/bin/命令 试试

package com.qykj.util; 改成ask.csdn.net.com

使用jsch这个框架,然后远程登陆,执行shell .和你用xshell是一样的

应该是java的环境变量设的不对,可以用绝对路径的试一下,然后修改一下环境变量设置

共11条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java远程执行linux命令
[url=http://hbiao68.iteye.com/blog/1624485]java远程执行linux命令[/url]
Java远程执行linux命令
之前在工作中做压力测试的时候,需要不断去给系统所在服务器制造压力,看系统什么时候会挂掉,因为给系统制造的压力不是说一下就会让它挂掉,而是需要结合生产环境用和合适的压力去压测,可能是几个小时或者一天,作为测试人员也不是无时无刻盯着服务器,看CPU、看内存、看系统各应用状态,所以就在想着有没有办法在进行压测的同时监控服务器的各个服务状态,有问题了立刻做记录并抛出,这样测试人员就可以释放出来去做别的事,...
Python远程执行Linux命令
最开始的版本# coding:utf-8 import paramiko def start_up(host,user,pwd,path): """启动服务""" # paramiko.util.log_to_file('paramiko_startup.log') ssh = paramiko.SSHClient() # ssh.load_system_host_keys()
jenkins 执行远程linux命令
jenkins 执行远程linux命令,jenkins 执行远程linux命令,jenkins 执行远程linux命令
远程执行linux命令
#1远程执行命令 命令之间以;隔开 可以多个命令 ssh root@192.168.2.60 "cd /software/mongodb/ ; mkdir -p /Hoboson/ZSS ;ls -ltr /Hoboson" #2可以执行脚本 ssh root@192.168.2.60 "cd /software;./show.sh " #3可以执行书写命令 但是记得开始结束标志 和退出 ssh...
JAVA通过ssh2远程执行linux命令
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import ch.ethz.ssh2.Connection;import ch.ethz.ssh2.Session;import ch.ethz.ssh2.Str...
Window直接执行远程Linux命令
可直接通过git 的 bash.exe执行 本地Windows: 477_deploy.cmd文件内容如下: "C:\Program Files\Git\bin\bash.exe" -c 'scp /c/tmp/*.jar tiaxia@c9t26477.itcs.hpecorp.net:/home/tiaxia/' "C:\Program Files\Git\bin\bash.exe
Java程序执行远程linux命令
此程序的目的是执行远程机器上的Shell脚本。 【环境参数】 远程机器IP:10.1.84.18 用户名:root 密码:root Shell脚本的路径:/kettle6.0/data-integration/carte.sh 【具体步骤】 1、在远程机器上,准备Shell脚本。  /kettle6.0/data-integration/carte.sh 2、导入
java执行Linux命令 .
/** * 修改Linux目录权限 * @param path */ public boolean chmod(String path) { // LogUtil.LogCommInfo("------修改权限路劲 path="+path); boolean flag = false ; try{ ...
java执行Linux命令
package Task2;import java.awt.List; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList;public class test
java执行linux命令
http://www.ganymed.ethz.ch/ssh2/ Ganymed SSH-2 for Java是用纯Java实现SSH-2协议的一个包。在使用它的过程中非常容易,只需要指定合法的用户名口令, 或者授权认证文件,就可以创建到远程Linux主机的连接,在建立起来的会话中调用该Linux主机上的脚本文件,执行相关操作 ...
Java执行Linux命令
Process和Runtimejava程序中要执行linux命令主要依赖2个类:Process和Runtime。每个Java应用程序都有一个Runtime类实例,使应用程序能够与其运行的环境相连接。可以通过getRuntime方法获取当前运行时环境。 应用程序不能创建自己的Runtime类实例。 介绍几个主要方法: Process exec(String command)
java执行Linux命令的问题
我java执行Linux命令使用的是ganymed-ssh2-build工具包,Linux命令输出结果比较短的时候没有问题,在Linux环境下面如果输出结果行数比较多,超过了一定行数的时候,会显示“----------more-------------”字样,然后输入空格或者回车,会继续展示余下的文本结果。现在我不知道怎么取“----------more-------------”这行值,然后接下来如何取得后面剩余的文本结果。请各位大神帮帮忙,谢了,在线等。。。。。rnrn我的代码如下:rn[code=java]rn rn public List excuteList(PollingHostInfo ph,String command)rn Connection conn = null;rn Session session = null;rn //final StringBuilder sb = new StringBuilder();rn BufferedReader stdoutReader = null;rn List list = new ArrayList();rn tryrn conn = new Connection(ph.getAddress());rn conn.connect();rn boolean connFlag = conn.authenticateWithPassword(ph.getUsername(),ph.getPassword());rn if(connFlag)rn session = conn.openSession();rn session.requestDumbPTY();rn Thread.sleep(1000);rn session.execCommand(command);rn InputStream stdout = new StreamGobbler(session.getStdout());rn stdoutReader = new BufferedReader(new InputStreamReader(stdout),10240);rn long start = System.currentTimeMillis();rn int i = 0;rn while(true)rn String line = stdoutReader.readLine();rn //假如包含rn if(line.contains("more"))rn logger.info("出现more关键字,继续读取......");rn session.execCommand(" ");rn stdout = new StreamGobbler(session.getStdout());rn stdoutReader = new BufferedReader(new InputStreamReader(stdout),10240);rn rn if(line == null || System.currentTimeMillis() - start > 100000)rn logger.info("命令结果读取完毕!");rn break;rn rn list.add(line);rn i++;rn logger.info("i+line=="+i+line);rn rn rn catch (Exception e)rn logger.info("excuteList方法出现异常!");rn e.printStackTrace();rn finallyrn if (session != null) rn session.close();rn rn if(conn != null)rn conn.close();rn rn if(stdoutReader != null)rn try rn stdoutReader.close();rn catch (IOException e) rn // TODO Auto-generated catch blockrn e.printStackTrace();rn rn rn rnrn rn return list;rn rn rn[/code]
java执行linux命令方式
java 调用linux 命令一般情况下Runtime.getRuntime().exec(command),command为String; 但是在另外两种情况则用上面的不可以,则要使用其他方式解决: 1.管道类命令:    String[] cmds = { "/bin/sh", "-c", command)    Runtime.getRuntime().exec(cmds ) 参考
JAVA执行Linux命令的方法
[code="java"] /** 执行Linux命令,并返回执行结果。 */ public static String exec(String[] args) { String result = ""; ProcessBuilder processBuilder = new ProcessBuilder(...
java执行linux命令的问题
Process exec(String command) rn 在单独的进程中执行指定的字符串命令。 rn Process exec(String[] cmdarray) rn 在单独的进程中执行指定命令和变量。 rnrnrn我想通过这两个方法来执行:cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -lrn可是不成功,无法获取process的getInputStream()。rnrn我把命令简化为:cat /proc/cpuinfo就可以。rn现在的问题就是这些参数( | grep "physical id" | sort | uniq | wc -l)怎么加上?rn我试过把这些命令弄成String[] cmdarray的形式,也不对。rn
JAVA执行LINUX命令的问题
[code=Java]rnString cmd = "tar -xvf /home/creat/ext-4.0.7-gpl/eclipse-jee-indigo-SR2-linux-gtk-x86_64.tar.gz "; rnProcess p = Runtime.getRuntime().exec(cmd);rnInputStream input = p.getInputStream(); rnStringBuffer buffer = new StringBuffer();rnfor (;;) rn rnint c = input.read(); rnif (c == -1) break;rnbuffer.append((char) c); rn rnString outputText = new String(buffer.toString().getBytes("iso-8859-1"), "utf-8"); rninput.close(); rnSystem.out.println(outputText);rn[/code]rnrnrn这是部分返回值rneclipse/plugins/org.eclipse.datatools.connectivity.apache.derby_1.0.102.v201107221459.jarrneclipse/plugins/org.eclipse.pde.ua.core_1.0.100.v20110516.jarrneclipse/plugins/org.eclipse.jdt.compiler.apt_1.0.400.v0110816-0800.jarrneclipse/plugins/org.eclipse.datatools.enablement.sap.maxdb.dbdefinition_1.0.0.v201107221507.jarrneclipse/plugins/org.eclipse.datatools.connectivity.oda.design_3.3.4.v201109211529.jarrneclipse/plugins/org.eclipse.team.cvs.ssh2_3.2.300.I20110511-0800.jarrnrn执行结果正确,但是这个是执行完了返回全部。如何能做到这个命令输出一行JAVA就获取一行?
pyqt远程批量执行Linux命令程序
写了个小程序: 功能 1.测试远程ssh连接是否成功, 2.批量执行远程ssh命令 效果如下: 代码如下: #-*- coding:utf-8 -*- import sys from PyQt4 import QtCore, QtGui, uic import locale import re import os from PyQt4.QtCore import * f
java通过代码登录远程linux服务器并执行linux命令
java通过代码登录远程linux服务器并执行linux命令废话不多说,直接上代码和所需要的jar包代码块代码如下:package com.snailxr.helper;import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader;import com.jcraft.jsch.C
java远程执行windows命令
需要在java应用系统中远程调用windows平台上的命令,并接收返回信息,怎么实现呢?rnrn注:跟黑客无关rnrnwindows平台与java应用系统在同一局域网内,windows平台上不允许安装任何其他软件(允许开启必要的windows服务)rn在java应用系统中需要调用windows的命令,比如说查看windows下的硬盘大小,并返回到应用系统中。rnrn怎么实现,高分求助!
java远程执行shell命令
1、连接服务器,执行shell的方法package com.shishike.susie.utility; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Properties; import java.util.Vector; import org.apache.log4j.L...
java执行linux命令并返回结果
public class TestCom { public static void main(String[] args) { String[] cmd = new String[]{"/bin/sh", "-c", "ls"}; TestCom tt = new TestCom(); tt.execute(cmd); } public void execut...
java执行多行linux命令例子
java如何执行多行linux命令? 解决方法: 直接举例说明,使用Runtime.getRuntime().exec执行多行linux命令使用分号“;”隔开即可,亲试有效! http://www.yayihouse.com/yayishuwu/chapter/1386...
java调用linux命令执行不成功
调用linux下现有的程序命令: String cmds[] = "sh", "-c", "cspquery >/path/cspquery.txt" ; Process p = Runtime.getRuntime().exec(cmds); 注:cspquery 为自己的一个进程命令 >/path/cspquery.txt 调用并把结果保存为 path(取实际路径)下cspquery.txt 还可以通过 p.getInputStream() 获得一个流然后再输出。 =============================================== 执行系统命令 String cmds = "ifconfig"; Process p = Runtime.getRuntime().exec(cmds); ============================================= linux下编译c文件 hello.c: #include
java执行Linux命令,支持通配符(*)
java执行linux或者windows命令,这个需求比较常见。 但是若使用  Runtime.getRuntime().exec(cmd); 会发现,若cmd中含有通配符,则无法执行,如cp  /dira/*.txt /dirb 可用如下方式执行: String[] cmdArr = new String[3];         cmdArr[0] = "/bin/sh";  
Java使用SSH执行Linux命令
通过使用远程SHELL执行框架 sshxcute 实现远程登录Linux并执行命令。 sshxcute 项目地址: http://code.google.com/p/sshxcute/   示例代码: import net.neoremind.sshxcute.core.ConnBean; import net.neoremind.sshxcute.core.Result; imp...
java 执行包含通配符linux命令
package test.runtime; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class RuntimeTest { /** * @param args */ public static ...
java远程调用ssh2执行Linux命令
java SSH2远程登录Linux服务执行命令前一段时间工作中用到了java远程调用Linux服务器,执行相关命令,因为比较常用,故此,在博客中记录下来。其中用到了ganymed-ssh2这个jar包,可以在http://www.ganymed.ethz.ch/ssh2/找到相关jar,不过这个jar目前好像已经停止维护了,还有一点是,这个jar,我在阿里的maven仓库中未找到。 好了,下面我
执行linux命令
try { Process process = Runtime.getRuntime().exec( “cat /proc/cpuinfo”); BufferedReader bufferedReader = new BufferedReader(
远程获得的有趣的linux命令
使用这些工具从远程了解天气、阅读资料等。 我们即将结束为期 24 天的 Linux 命令行玩具日历。希望你有一直在看,如果没有,请回到开始,从头看过来。你会发现 Linux 终端有很多游戏、消遣和奇怪之处。 虽然你之前可能已经看过我们日历中的一些玩具,但我们希望每个人都遇见一个新事物。 今天的玩具(实际是玩具集合)有点不同。到目前为止,我主要是想把重点放在那些独立的玩具上,并且完全可在开源...
linux命令远程下载文件
我们在做开发的时候经常需要用linux,必要时还需要传送文件,传送来传送去,我这里把我的常用方法分享出来,我的系统是ubuntu 16.04,除了一些图形化的工具,我们还可以使用下面的方式 首先安装 sudo apt-get install lrzsz sz命令发送文件到本地: sz filenamerz命令本地上传文件到服务器: rz 执行该命令后,在弹出框中选择要上
linux命令-远程拷贝
连接远程服务器:sudo apt-get install openssh-server 打开ssh服务,才能在另外一台终端访问本机。ssh 用户名@服务器地址ssh gionee@10.8.8.170本地电脑复制文件夹到本地scp -r gionee@10.8.9.120:/home/wangbin/houjie/android4.0.4.tar.gz /home/wangpan/android4...
Java实现远程执行SHELL
Java实现远程执行SHELL, JAVA实现远程登陆执行shell脚本。上传文件到远程服务器,下载远程服务器资源。 ShellExecutor exe = new ShellExecutor("192.168.1.1", 22, "USERNAME", "PASSWORD"); if (exe.login()) { ResultEntity resultEntity = exe.execute("ls -ls"); if (resultEntity.isExecuteSuccess()) { System.out.println("结果:" + resultEntity.getResult() + "|状态:" + resultEntity.getStatusCode()); } else { System.err.println("执行出错了-->" + resultEntity.getErrorMsg()); } } else { System.err.println("登陆失败"); }
java远程执行文件的问题!
类似这样exec("\"D:/java/wyy/1.bat\"")通过Process可以实现java对本地机器上的exe或者bat文件的访问.如果是访问局域网内的另一台机器上的bat文件呢?或者是服务器上的?rnrn这个问题可以用java实现吗?rn有人跟我说可以用socket实现,可我发现socket只能实现文本的互相发送啊(类似聊天),没办法把文本变成命令行来在服务器端执行啊?rnrn还有人跟我说可以用客户机的bat来实现对服务器端bat的调用?rnrn大家能救救我吗?rnqq:27050489
JAVA远程(ssh)执行linux脚本
1.准备测试脚本   /test.sh #!/bin/sh echo 'Hello World' 2.导入maven依赖 1 dependency> 2 groupId>org.jvnet.hudsongroupId> 3 artifactId>ganymed-ssh2artifactId> 4 version>build210-hudson-1v
java执行远程linux服务器命令
[url]http://www.ganymed.ethz.ch/ssh2/[/url] [code="java"]import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import ch.e...
java jsch执行远程命令
[code="java"] /* * SSHManager * * @author cabbott * @version 1.0 */ package jsch; import com.jcraft.jsch.*; import java.io.IOException; import java.io.InputStream; import ja...
java 远程执行 linux 命令
官网下载: http://www.ganymed.ethz.ch/ssh2/ Maven: <!-- https://mvnrepository.com/artifact/ch.ethz.ganymed/ganymed-ssh2 --> <dependency> <groupId>ch.ethz.ganymed</groupId> ...
Java远程执行Shell指令
JSch(Java Secure Channel)是SSH2的一个纯Java实现。它允许你连接到一个sshd 服务器,进而使用端口转发,X11转发,文件传输等等功能。在前面的博客里,有介绍到如何使用JSch实现SFTP的相关操作,本文这里主要介绍如何利用JSch进行远程Shell操作。 软硬件环境说明:Windows10、IntelliJ IDEA、SpringBoot 2.1....
相关热词 c# 线程结束时执行 c# kb mb 图片 c# 替换第几位字符 c#项目决定成败 c# 与matlab c# xml缩进 c#传感器基础 c#操作wps c# md5使用方法 c# 引用父窗口的组件