在远程服务器执行本地 Shell 脚本

若您想在远程服务器执行本地 Shell 脚本,使用传统方法需要先上传脚本,再登录远程服务器执行脚本,步骤繁多。使用 PelicanDT,可以通过一行 Java 代码实现此操作。

前提条件

  • 已安装 PelicanDT SDK。请参见安装 PelicanDT SDK

  • 已在 Linux 远程服务器上运行应用。

背景信息

本文使用 demo 工程来进行说明。

操作步骤

  1. 在本地创建 Shell 脚本。

  2. 在您的工程中执行以下代码。

    说明

    请在代码中填入您的远程服务器 IP、用户名、登录密码和脚本地址等信息。

    package com.alibaba.pelican.demo;
    
    import com.alibaba.pelican.chaos.client.RemoteCmdClientConfig;
    import com.alibaba.pelican.chaos.client.RemoteCmdResult;
    import com.alibaba.pelican.chaos.client.impl.RemoteCmdClient;
    import com.alibaba.pelican.chaos.client.utils.CpuUtils;
    import org.apache.commons.io.IOUtils;
    
    /**
     * @author moyun@middleware
     */
    public class DemoExecScript {
    
        public static void main(String[] args) {
    
            //服务器IP
            String ip = "";
            //服务器用户名
            String userName = "";
            //服务器登录密码
            String password = "";
            RemoteCmdClientConfig config = new RemoteCmdClientConfig();
            config.setIp(ip);
            config.setUserName(userName);
            config.setPassword(password);
    
            RemoteCmdClient client = new RemoteCmdClient(config);
            //脚本地址
            String scriptPath = "demo.sh";
            RemoteCmdResult result = client.scpAndExecScript(scriptPath);
            System.out.println(result.getStdInfo());
        }
    }
                        

执行结果

demo 工程为例,执行程序后,日志输出内容如下:

[root@iZ2zejdbo0lni6dwgifbhqZ ~]$cd /root/scripts/
[root@iZ2zejdbo0lni6dwgifbhqZ ~/scripts]$sh demo.sh
total 56
dr-xr-x---.  6 root root 4096 Jan 25 15:32 .
dr-xr-xr-x. 18 root root 4096 Jan 24 14:16 ..
-rw-------   1 root root  227 Jan 24 21:01 .bash_history
-rw-r--r--.  1 root root   18 Dec 29  2013 .bash_logout
-rw-r--r--.  1 root root  176 Dec 29  2013 .bash_profile
-rw-r--r--.  1 root root  176 Dec 29  2013 .bashrc
drwx------   3 root root 4096 Oct 15  2017 .cache
-rw-r--r--.  1 root root  100 Dec 29  2013 .cshrc
drwxr-xr-x   2 root root 4096 Oct 15  2017 .pip
-rw-r--r--   1 root root   64 Oct 15  2017 .pydistutils.cfg
drwxr-xr-x   2 root root 4096 Jan 25 15:32 scripts
drwx------   2 root root 4096 Jan 24 14:16 .ssh
-rw-r--r--.  1 root root  129 Dec 29  2013 .tcshrc
-rw-------   1 root root  596 Jan 25 15:32 .viminfo
[root@iZ2zejdbo0lni6dwgifbhqZ ~/scripts]$export HISTFILE=/dev/null
[root@iZ2zejdbo0lni6dwgifbhqZ ~/scripts]$exit
logout