Runtime.getRuntime().exec执行scp失败

    xiaoxiao2021-04-03  32

    1.本地scp命令正常

    [root@hadron ~]# scp /root/scripts/* 192.168.1.157:/opt Step1.sh 100% 340 0.3KB/s 00:00 Step2.sh 100% 12 0.0KB/s 00:00 Step3.sh

    2 Java源码

    package util; import java.io.IOException; import java.io.InputStreamReader; import java.io.LineNumberReader; import java.net.InetAddress; import java.net.UnknownHostException; public class LocalCommand { public static final String getIP(){ try { InetAddress ia = InetAddress.getLocalHost(); return ia.getHostAddress(); } catch (UnknownHostException e1) { e1.printStackTrace(); return null; } } public static final String exe(String cmd){ StringBuffer sb=null; Process process=null; LineNumberReader reader=null; try { sb = new StringBuffer(); process=Runtime.getRuntime().exec(cmd); reader = new LineNumberReader(new InputStreamReader(process.getInputStream())); String line; while ((line = reader.readLine()) != null){ sb.append(line+"\n"); } return sb.toString(); } catch (IOException e) { e.printStackTrace(); return null; }finally { try { reader.close(); } catch (IOException e) { e.printStackTrace(); } process.destroy(); } } }

    测试类

    package test; import util.LocalCommand; public class TestLocal { public void test(){ String rs; rs=LocalCommand.exe("scp /root/* 192.168.1.157:/opt/"); System.out.println(rs); } public static void main(String[] args) { // TODO Auto-generated method stub new TestLocal().test(); } }

    执行之后,远程节点没有找到复制scripts内容。

    3.解决办法

    把scp命令中的*号去掉。

    public void test(){ String rs; rs=LocalCommand.exe("scp -r /root/scripts/ 192.168.1.157:/opt/"); System.out.println(rs); }

    到远程节点可以找到复制的文件

    [root@node]:/opt/scripts# ls Step1.sh Step2.sh Step3.sh
    转载请注明原文地址: https://ju.6miu.com/read-665859.html

    最新回复(0)