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...
FTP的主动模式和被动模式
qq_42964449:
FTP的主动模式和被动模式
for communication:
使用Apache Commons Net API实现FTP上传下载过程中的坑点