`

java连接Linux通道执行shell脚本

 
阅读更多
package com.test.linux;

import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;

import org.apache.commons.io.IOUtils;

import ch.ethz.ssh2.ChannelCondition;
import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler;

public class RemoteShellExecutor {
     
     private Connection conn;
     /** 远程机器IP */
     private String ip;
     /** 用户名 */
     private String osUsername;
     /** 密码 */
     private String password;
     private String charset = Charset.defaultCharset().toString();

     private static final int TIME_OUT = 1000 * 5 * 60;

     /**
      * 构造函数
      * @param ip
      * @param usr
      * @param pasword
      */
     public RemoteShellExecutor(String ip, String usr, String pasword) {
          this.ip = ip;
         this.osUsername = usr;
         this.password = pasword;
     }


     /**
     * 登录
     * @return
     * @throws IOException
     */
     private boolean login() throws IOException {
         conn = new Connection(ip);
         conn.connect();
         return conn.authenticateWithPassword(osUsername, password);
     }

     /**
     * 执行脚本
     * 
     * @param cmds
     * @return
     * @throws Exception
     */
     public int exec(String cmds) throws Exception {
         InputStream stdOut = null;
         InputStream stdErr = null;
         String outStr = "";
         String outErr = "";
         int ret = -1;
         try {
         if (login()) {
             // Open a new {@link Session} on this connection
             Session session = conn.openSession();
             // Execute a command on the remote machine.
             session.execCommand(cmds);
             
             stdOut = new StreamGobbler(session.getStdout());
             outStr = processStream(stdOut, charset);
             
             stdErr = new StreamGobbler(session.getStderr());
             outErr = processStream(stdErr, charset);
             
             session.waitForCondition(ChannelCondition.EXIT_STATUS, TIME_OUT);
             
             System.out.println("outStr=" + outStr);
             System.out.println("outErr=" + outErr);
             
             ret = session.getExitStatus();
         } else {
             throw new Exception("登录远程机器失败" + ip); // 自定义异常类 实现略
         }
         } finally {
             if (conn != null) {
                 conn.close();
             }
             IOUtils.closeQuietly(stdOut);
             IOUtils.closeQuietly(stdErr);
         }
         return ret;
     }

     /**
     * @param in
     * @param charset
     * @return
     * @throws IOException
     * @throws UnsupportedEncodingException
     */
     private String processStream(InputStream in, String charset) throws Exception {
         byte[] buf = new byte[1024];
         StringBuilder sb = new StringBuilder();
         while (in.read(buf) != -1) {
             sb.append(new String(buf, charset));
         }
         return sb.toString();
     }

    public static void main(String args[]) throws Exception {
        RemoteShellExecutor executor = new RemoteShellExecutor("172.xx.x.xxx", "root", "DSJdsj171");
        
        System.out.println(executor.exec("/usr/hqmart/nfs/nfsJob.sh")); //linux 系统上的shell脚本文件 
    }
}

 

分享到:
评论

相关推荐

    java连接Linux执行shell脚本,命令

    java连接服务器,并执行Linux服务器上的命令或脚本

    linux shell脚本启动java类

    详细的linux shell脚本启动java代码类。

    linux下shell脚本实现数据的导出

    为了使Java代码能够成功执行shell脚本,需要注意以下几点: - 确保Java运行环境有执行`sh`命令的权限。 - 脚本路径正确且Java程序有读取该文件的权限。 - `oracle`用户有执行`exp`命令和写入指定文件的权限。 总结...

    IDEA中编写并运行shell脚本的实现

    IDEA中编写并运行shell脚本的实现 IDEA中编写并运行shell脚本的实现是指在Integrated Development Environment(IDE)中编写、配置和运行shell脚本的过程。该过程需要安装bashsupport插件,配置插件,安装git软件,...

    java在win下启动bat和在linux下启动shell脚本

    在Windows和Linux环境中,启动批处理脚本(bat)和shell脚本(sh)是常见的任务,特别是在自动化和脚本执行过程中。`RunScript.java`和`StreamGobbler.java`这两个文件可能就是用来实现这个功能的。 `RunScript....

    Linux云计算-Shell脚本100例

    例如,使用Shell脚本来启动、停止Java应用程序,或者通过JMX接口获取运行时信息。 在“Linux云计算-Shell脚本100例@www.java1234.com.pdf”这份资料中,读者可以期待看到一系列实用的Shell脚本示例,涵盖上述提到的...

    使用runtime实现linux命令行或shell脚本多次调用

    在Java编程中,有时我们需要与操作系统进行交互,执行一些系统级别的任务,比如运行Linux命令或shell脚本。`Runtime`类是Java标准库提供的一种机制,允许我们在程序中执行操作系统命令。本文将深入探讨如何使用`...

    JAVA操作linux服务器,本文用于启动shell脚本并返回数据,简单易懂,可随时修改

    本主题聚焦于使用Java来操作Linux服务器,特别是通过执行shell脚本来获取服务器的反馈数据。以下将详细阐述这个过程涉及的技术点和步骤。 首先,我们需要理解Java中的SSH(Secure Shell)框架,它允许我们在安全的...

    java调用shell脚本执行sqlldr与存储过程

    在linux环境中,这三个用户都可以直接在任意目录下执行该shell脚本,可是在java代码中调用shell脚本时,报了如下4个错误: 1、sqlldr: command not found 2、sqlplus: command not found 3、0750: You may need to ...

    java调用shell(包含有参数的调用)

    在某些情况下,Java程序需要调用Shell脚本执行特定的操作,比如访问Linux系统命令或者自动化执行一些任务。本文将详细解释Java如何调用Shell脚本,包括如何编写Shell脚本和在Java中如何传递参数。 首先,Shell脚本...

    linux系统java服务自启动shell脚本及服务cpu内存占用监控脚本

    自启动shell脚本和CPU、内存占用监控脚本能确保Java服务在系统启动时自动运行,并实时监测其性能状态,以便及时发现和处理潜在问题。下面将详细介绍这两个方面的内容。 一、Linux系统Java服务自启动shell脚本 自...

    shell,bat脚本运行java程序

    下面将详细介绍如何使用shell脚本(适用于Unix/Linux系统)和bat脚本(适用于Windows系统)来运行Java程序。 **shell脚本运行Java程序** 在Unix/Linux环境中,我们可以创建一个.sh文件作为shell脚本来执行Java程序...

    linux的shell脚本快速部署java环境jdk+tomcat+mysql

    总的来说,通过这些shell脚本,你可以快速在Linux环境中搭建起Java开发和运行的基础架构,极大地提高了工作效率。如果你对脚本的执行流程或具体命令不熟悉,可以详细阅读使用文档,或者深入学习Linux、Java和数据库...

    Java调用linux shell脚本的方法

    3. **处理输出流**:当shell脚本执行时,它可能会产生标准输出(stdout)和错误输出(stderr)。为了防止输出缓冲区满导致`waitFor()`阻塞,我们需要捕获并处理这些输出。Java的`Process`类提供了`getInputStream()`...

    linux 安装tomcat shell脚本

    Shell脚本是Linux系统中的一种批处理程序,它允许用户编写一系列命令并将其保存为一个文件,通过执行这个文件来完成自动化任务。编写Shell脚本通常涉及变量定义、条件判断、循环结构、函数定义等元素。在我们的场景...

    linux系统Shell脚本运行java项目。

    linux shell脚本启动java。 ---------------------------------------- Windows编辑的sh,在linux会报错: shell unexpected end of file 解决办法: vim test.sh :set fileformat=unix :wq ----------------------...

    Linux的shell脚本

    Linux Shell 脚本 Linux Shell 脚本是一种为 Shell 编写的脚本程序。Shell 是一种命令语言,又是一种程序设计语言。Shell 脚本的主要作用是帮助用户更方便地使用 Linux 操作系统。 一、 Shell 介绍 Shell 是一个...

    java 远程调用Shell脚本客户端包

    3. **Shell脚本执行**:在SSH连接建立后,Java程序可以通过执行`exec`命令来运行远程服务器上的Shell脚本。脚本可以包含任意的Linux或Unix命令,甚至复杂的流程控制语句。 4. **输入/输出流处理**:为了获取Shell...

    Linux教程+ shell学习笔记 + Shell脚本常用命令+shell脚本100例资源合集

    shell脚本 是一种shell编写的脚本程序。 shell编程跟Java、PHP 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执 行的脚本解释器就可以了。 为什么要学习和使用shell? Shell属于内置的脚本 程序开发...

    android系统中调用shell脚本

    在Android系统中,由于安全性和权限的限制,直接调用shell脚本并不像在Linux或Unix环境下那样简单。然而,对于非root用户来说,确实有一些方法可以实现对shell脚本的调用,尤其是在开发和调试过程中。下面我们将深入...

Global site tag (gtag.js) - Google Analytics