JDK自带的两种方式有通过Runtime.getRuntime().exec()和ProcessBuilder类来做, 后者是JDK1.5以后引入的,官方也建议放弃使用Runtime的方式来做。今天在实现的时候就是采用ProcessBuilder,apache commons类库也提供了一个exec包专门做这类功能,这次暂时没用到。

在编写过程中,遇到几个比较坑的地方:

1、构建ProcessBuilder采用的参数:

建议采用“/bin/bash”. "-c",  "your shell"组装一个List, 其实你一次如果执行多个命令,都可以统一放到那个“your shell”字符串中。

2、执行过程中输出流控制:

在执行过程中,我们肯定需要得到正常的执行结果,也需要知道出错的内容提示, 这时需要将错误输出流重定向到标准输出流,相当于合并在一起输出

3、有些命令是需要环境变量的支持, 这时需要执行evivonment()拷贝系统相关env变量到当前进程上下文中,供命令使用。

4、如果执行过程卡死,需要知道可以kill哪个进程, 所以输出内容中将当前进程ID打印出,便于手动处理。<

JDK自带的两种方式有通过Runtime.getRuntime().exec()和ProcessBuilder类来做, 后者是JDK1.5以后引入的,官方也建议放弃使用Runtime的方式来做。今天在实现的时候就是采用ProcessBuilder,apache commons类库也提供了一个exec包专门做这类功能,这次暂时没用到。   在编写过程中,遇到几个比较坑的地方:1、构建Proc 程序打成jar包,在本地服务器上 执行 shell 命令 。这种使用MyRuntimeUtil工具类 java 程序远程linux服务器有两个框架分别是:jsch与ganymed-ssh2框架**。**推荐使用jsch框架因为ganymed-ssh2框架不支持麒麟服务器的连接原因是openssl版本过高,ganymed-ssh框架不维护了所以不支持。 二、 执行 本地的 shell 命令 <dependency>
Java 程序运行时如何对linux服务器做出一些指令,可以直接 执行 shell 命令 或者 脚本 并输出控制台信息。 1.引入类 import ch.ethz.ssh2.Connection; import ch.ethz.ssh2.Session; import ch.ethz.ssh2.StreamGobbler; import java .io.BufferedReader; import java .io.IOException; import java .io.InputStream; import java .i
public class CommandUtil { private static final String WINDOWS_NT = "Windows"; private static final String LINUX = "Linux"; public static boolean execute(String[] commands) { boolean success = f
/* ****************** explain ********************* * class : HelloWorld * @author : ncc * create time : 2018-5-2 下午04:22... [code=html] [【kafka运维】Kafka全网最全最详细运维命令合集(精品强烈建议收藏!!!)] (https://blog.csdn.net/u010634066/article/details/118215928) [/code] FTP的主动模式和被动模式 qq_42964449: 很不错的一篇文章,完美解答了我的连接问题 FTP的主动模式和被动模式 for communication: 很好,清晰明了 使用Apache Commons Net API实现FTP上传下载过程中的坑点 楼主有没有遇到下载调用这个方法ftpClient.retrieveFile(remote, fos);下载文件大于100M以上会出现程序假死