`
knight_black_bob
  • 浏览: 842825 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

shell java 执行

    博客分类:
  • java
阅读更多

 

java shell 命令 

/**
 * 
 * @author baoyou E-mail:curiousby@163.com
 * @version 2016年11月2日 下午1:54:49
 * desc:
 */
public class ShellProcess {

    private static ShellProcess instance;

    public static ShellProcess getInstance() {
        if (instance == null) {
            synchronized (ShellProcess.class) {
                if (instance == null) {
                    instance = new ShellProcess();
                }
            }
        }
        return instance;
    }

    /**
     * 执行相应shell脚本
     * @param args 执行脚本的参数,[0]path:shell脚本路径;[1~n]脚本入参
     * @return     返回码,0:成功  1:失败
     */
    public int runShell(String[] args) {
        int runRes = SystemGlobal.FAILED;
        try {
            Process process = Runtime.getRuntime().exec(args);//调用相应shell脚本
            new StreamGobbler(process.getInputStream(), StreamGobbler.INFO).start();
            new StreamGobbler(process.getErrorStream(), StreamGobbler.ERROR).start();
            runRes = process.waitFor();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return runRes;
    }

    /**
     * 执行相应shell命令
     * @param cmd 执行的命令
     * @return    返回码,0:成功  1:失败
     */
    public int runShell(String cmd) {
        return runShell(cmd);
    }

    /**
     * 自动根据运行时环境执行shell命令
     * @param args shell命令以空格分割后的list
     * @return     返回码,0:成功  1:失败
     */
    public int runShell(List<String> args) {
        int runRes = SystemGlobal.FAILED;
        try {
            ProcessBuilder pb = new ProcessBuilder(args);
            Process process = pb.start();
            new StreamGobbler(process.getInputStream(), StreamGobbler.INFO).start();
            new StreamGobbler(process.getErrorStream(), StreamGobbler.ERROR).start();
            runRes = process.waitFor();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return runRes;
    }

    /**
     * 执行shell命令,并获取返回结果
     * @param args shell命令以空格分割后的list
     * @return     执行shell命令后的返回结果(按行分割后的list),如果发生异常,返回空List
     */
    public List<String> runShellWithResult(List<String> args) {
        List<String> results = new ArrayList<String>();
        try {
            ProcessBuilder pb = new ProcessBuilder(args);
            Process process = pb.start();
            BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String data = null;
            while ((data = br.readLine()) != null) {
                results.add(data);
            }
            new StreamGobbler(process.getInputStream(), StreamGobbler.INFO).start();
            new StreamGobbler(process.getErrorStream(), StreamGobbler.ERROR).start();
            process.waitFor();
        } catch (Exception e) {
            e.printStackTrace();
            return new ArrayList<String>();
        }
        return results;
    }

}

 

 

 

package com.taskschedule.util;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.apache.log4j.Logger;

/**
 * 
 * @author baoyou E-mail:curiousby@163.com
 * @version 2016年11月2日 下午1:54:57
 * desc:
 */
public class StreamGobbler extends Thread {
    private InputStream is;
    private int type;
    private static Logger logger = Logger.getLogger(StreamGobbler.class);

    public static final int INFO = 0;
    public static final int ERROR = 1;

    public StreamGobbler(InputStream is, int type) {
        this.is = is;
        this.type = type;
    }

    @Override
    public void run() {
        try {
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);
            String line = null;
            while ((line = br.readLine()) != null) {
                if (type == INFO) {
                    logger.info(line);
                } else if (type == ERROR) {
                    logger.error(line);
                }
            }
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
    }
}

 

 

 

 

 

 

 

 

捐助开发者

在兴趣的驱动下,写一个免费的东西,有欣喜,也还有汗水,希望你喜欢我的作品,同时也能支持一下。 当然,有钱捧个钱场(右上角的爱心标志,支持支付宝和PayPal捐助),没钱捧个人场,谢谢各位。



 
 
 谢谢您的赞助,我会做的更好!

 

 

1
0
分享到:
评论
2 楼 knight_black_bob 2017-01-10  
cs6641468 写道
用异步线程读走stream是对的,  有的操作系统的系统buffer限制,同步读取确实有可能会导致执行shell卡住。

剩下的就是代码的问题了:
1. 全是相同代码,能否share成同一个方法?
2. 还有就是这个单例写法,就很是有些搞笑了,给你贴出来,自己思考一下找找问题吧
public static ShellProcess getInstance() { 
        if (instance == null) { 
            return new ShellProcess(); 
        } 
        return instance; 
    } 



感谢指点  
1 楼 cs6641468 2017-01-10  
用异步线程读走stream是对的,  有的操作系统的系统buffer限制,同步读取确实有可能会导致执行shell卡住。

剩下的就是代码的问题了:
1. 全是相同代码,能否share成同一个方法?
2. 还有就是这个单例写法,就很是有些搞笑了,给你贴出来,自己思考一下找找问题吧
public static ShellProcess getInstance() { 
        if (instance == null) { 
            return new ShellProcess(); 
        } 
        return instance; 
    } 


相关推荐

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

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

    shell,bat脚本运行java程序

    总的来说,shell和bat脚本提供了一种方便的方式来管理和运行Java程序,特别是对于需要定时执行或在后台运行的任务,它们能极大地简化操作流程。通过熟练掌握这两种脚本,你可以更高效地管理Java应用的生命周期。

    shell java

    在IT行业中,尤其是在系统管理和自动化任务执行领域,`shell` 和 `Java` 是两种非常重要的工具。`Shell` 是Unix/Linux系统中的命令解释器,它提供了用户与操作系统内核交互的接口,允许用户通过编写脚本来执行一系列...

    JAVA执行shell命令小工具

    标题中的“JAVA执行shell命令小工具”指的是使用Java编程语言编写的小程序,它能够执行操作系统级别的Shell命令。在Java中,通常使用`Runtime.getRuntime().exec()`或者`ProcessBuilder`类来实现这一功能。这两个类...

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

    在java代码中调用执行shell脚本,sqlldr导数与使用sqlplus在shell调用执行存储过程。 linux环境中有2个dba的用户:oracle、erm 还有1个web用户:erm 在linux环境中,这三个用户都可以直接在任意目录下执行该shell...

    Shell执行/调用Java/Jar程序例子

    这篇博客“Shell执行/调用Java/Jar程序例子”探讨了如何使用Shell脚本来启动和控制Java应用程序,特别是JAR文件。这里我们将深入讲解相关知识点。 1. **Shell脚本基础** Shell脚本是Linux或Unix操作系统中的命令行...

    shell脚本运行java程序jar的方法

    shell脚本运行java程序jar的方法 shell脚本运行java程序jar的方法是指使用shell脚本来运行...shell脚本运行java程序jar包的方法需要注意环境变量的问题,并且需要设置正确的环境变量,以便java命令可以正确地执行。

    Java实现远程执行SHELL

    Java实现远程执行SHELL, JAVA实现远程登陆执行shell脚本。上传文件到远程服务器,下载远程服务器资源。 ShellExecutor exe = new ShellExecutor("192.168.1.1", 22, "USERNAME", "PASSWORD"); if (exe.login()) {...

    java调用shell命令.pdf

    在 Java 中调用 Shell 命令是非常常见的操作,特别是在需要执行系统命令或脚本时。在这个例子中,我们将看到如何使用 Java 调用 Shell 命令,并介绍相关的知识点。 Java 调用 Shell 命令的必要性 在实际开发中,...

    java Sokcet远程调用shell

    Java Socket远程调用Shell是一种通过Java程序利用Socket通信协议实现对远程服务器的Shell命令执行的技术。这种方式常用于系统管理、自动化运维或者分布式系统的组件交互。下面将详细介绍这一技术的实现原理、步骤...

    shell 脚本调用Java类

    在IT领域,Shell脚本和Java是两种非常重要的工具,它们各自在不同的场景下发挥着重要...理解如何在Shell环境中正确运行Java程序,以及如何在Shell脚本中控制Java程序的执行,是提高工作效率和系统灵活性的关键技能。

    shell脚本启动Java程序测试工程

    在IT行业中,shell脚本是Linux或Unix操作系统中的一种强大工具,用于自动化任务执行和系统管理。当涉及到启动Java应用程序时,shell脚本可以提供一个方便、可重复且灵活的方法。下面我们将深入探讨如何使用shell脚本...

    Java 调用 Linux shell 命令执行框架:sshxcute

    sshxcute 就是这样一个框架工具集,它基于 JSCH 构建,允许工程师利用Java 代码通过 SSH 连接远程批量执行 Linux/UNIX 系统上的命令或者脚本,同时加入了判断成功与否,取回输出等多种实用功能。sshxcute 不管是针对...

    用Java实现的shell

    用Java实现的shell,用Java实现的shell,用Java实现的shell用Java实现的shell用Java实现的shell用Java实现的shell用Java实现的shell用Java实现的shell用Java实现的shell用Java实现的shell

    java连接linux,执行shell命令的工具类 sshxcute.jar

    在Java开发中,有时我们需要远程连接到Linux服务器执行shell命令,比如进行系统管理、自动化运维或者数据处理等任务。在这种情况下,使用SSH(Secure Shell)协议是常见的解决方案,因为它提供了安全的网络通信。...

    Java 调用 Shell 命令

    2. **调用Shell脚本**:通过Java的`Runtime.getRuntime().exec()`方法来执行Shell命令或脚本。 下面是一个具体的Java类实现示例,用于调用Shell脚本并记录执行日志: ```java import java.io.*; import java.text....

    java调用shell脚本

    首先,Java通过Runtime类或ProcessBuilder类可以执行外部程序,包括Shell脚本。`Runtime.getRuntime().exec()`方法是较早期的调用方式,而`ProcessBuilder`则是在Java 5之后引入的,提供更灵活的进程控制。 1. **...

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

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

    java远程调shell

    Java远程调用Shell是一种技术,它允许通过Java程序执行远程服务器上的操作系统命令,这在系统集成、自动化运维或跨平台任务调度中非常有用。这里,我们深入探讨如何实现这一功能,以及涉及的关键知识点。 首先,...

    shell shell java c c++

    根据提供的标题、描述以及部分内容,我们可以看出这是一篇与编程语言相关的文章,主要涉及Shell、Java、C 和 C++ 四种编程语言。虽然提供的文本内容并不具备实际意义,但基于这些关键词,我们可以构建出一系列关于这...

Global site tag (gtag.js) - Google Analytics