【Hadoop离线基础总结】通过Java代码执行Shell命令

通过Java代码执行Shell命令


  • 需求
    在实际工作中,总会有些时候需要我们通过java代码通过远程连接去linux服务器上面执行一些shell命令,包括一些集群的状态管理执行任务集群的可视化界面操作等等,所以我们可以通过java代码来执行linux服务器的shell命令
    为了解决上述问题,google公司给提出了对应的解决方案,开源出来了一个jar包叫做 sshxcute,通过这个jar包我们可以通过java代码,非常便捷的操作我们的linux服务器
    项目下载地址:https://code.google.com/archive/p/sshxcute/
    使用说明:https://www.ibm.com/developerworks/cn/opensource/os-sshxcute/

  • 创建maven的java工程并导入jar包
    先将sshxcute导入
    在这里插入图片描述
    【Hadoop离线基础总结】通过Java代码执行Shell命令_第1张图片
    在pom.xml中插入
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.pluginsgroupId>
                <artifactId>maven-compiler-pluginartifactId>
                <version>3.0version>
                <configuration>
                    <source>1.8source>
                    <target>1.8target>
                    <encoding>UTF-8encoding>
                configuration>
            plugin>
            <plugin>
                <groupId>org.apache.maven.pluginsgroupId>
                <artifactId>maven-shade-pluginartifactId>
                <version>2.2version>
                <executions>
                    <execution>
                        <phase>packagephase>
                        <goals>
                            <goal>shadegoal>
                        goals>
                        <configuration>
                            <filters>
                                <filter>
                                    <artifact>*:*artifact>
                                    <excludes>
                                        <exclude>META-INF/*.SFexclude>
                                        <exclude>META-INF/*.DSAexclude>
                                        <exclude>META-INF/*/RSAexclude>
                                    excludes>
                                filter>
                            filters>
                        configuration>
                    execution>
                executions>
            plugin>
        plugins>
    build>
    

  • 开发测试用例
    package cn.itcate.sshxcute;
    
    import com.jcraft.jsch.JSchException;
    import net.neoremind.sshxcute.core.ConnBean;
    import net.neoremind.sshxcute.core.SSHExec;
    import net.neoremind.sshxcute.exception.TaskExecFailException;
    import net.neoremind.sshxcute.task.impl.ExecCommand;
    
    public class XcuteExcute {
        public static void main(String[] args) throws TaskExecFailException, JSchException {
            ConnBean connBean = new ConnBean("192.168.0.30", "root", "zz140412.");
            // 获取SSHExec用于执行Shell命令
            SSHExec sshExec = SSHExec.getInstance(connBean);
            // 连接linux服务器
            sshExec.connect();
    
            /*
            CustomTask是一个抽象类
            获取抽象类的两种方式:
            一种是找子类
            另一种是找抽象类有没有提供方法返回其本身
             */
            ExecCommand execCommand = new ExecCommand("echo 'shut up' >> /export/servers/helloworld.txt");
    
            // 执行linux命令
            sshExec.exec(execCommand);
    
            //断开连接
            sshExec.disconnect();
        }
    }
    

你可能感兴趣的:(Hadoop离线基础总结)