网站首页 > java教程 正文
利用java远程调用linux命令或shell脚本
目的:远程备份、导出/导入数据库数据、执行定时任务等等。
当然要根据自己特定功能需求。
1、 远程主机
这里使用我们的阿里云来作为测试服务器
版本如下:
用户名:odysee
密码:...隐藏...
脚本:/home/odysee/bb/available.sh
功能:获取/可用空间,顺便传一个位置参数(虽然这里用不到)。
这里大家根据自己需求来编写脚本。
2、 Maven项目添加依赖jar包
<!-- ssh2 -->
<dependency>
<groupId>org.jvnet.hudson</groupId>
<artifactId>ganymed-ssh2</artifactId>
<version>build210-hudson-1</version>
</dependency>
3、 编写工具类ShellExecutorUtil
关于以下代码,请大家详看注释。
定义变量及构造器
登录方法
将linux返回屏幕数据通过流返回为字符串
以上都是一些通用方法
下面是主要实现方法
4、 测试
赋予脚本可执行权限
运行代码
5、 补充
工具类代码贴在最后,原文件可以留言或私信。
以上只是实现java调用linux脚本的一种方式,如果大家有其他的方法。
欢迎评论留言,感谢支持。
工具类如下:
package com.qzsoft.qzhrmis.commons.utils;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
import org.apache.commons.io.IOUtils;
import ch.ethz.ssh2.ChannelCondition;
import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler;
public class ShellExecutorUtil {
private Connection conn;
private String ip;
private String username;
private String password;
//字符集
private String charset = Charset.defaultCharset().toString();
//超时30minute
private static final int TIME_OUT = 1000 * 30 * 60;
/**
* 构造器
* @param ip
* @param username
* @param pasword
*/
public ShellExecutorUtil(String ip, String username, String pasword) {
this.ip = ip;
this.username = username;
this.password = pasword;
}
/**
* 登录
* @return
* @throws IOException
*/
private boolean login() throws IOException {
conn = new Connection(ip);
conn.connect();
return conn.authenticateWithPassword(username, password);
}
/**
* 使用流处理执行linux命令输出到屏幕的数据
* @param in
* @param charset
* @return
* @throws Exception
*/
private String processStream(InputStream in, String charset) throws Exception {
byte[] buf = new byte[1024];
StringBuilder sb = new StringBuilder();
while (in.read(buf) != -1) {
sb.append(new String(buf, charset));
}
return sb.toString();
}
/**
* 执行脚本
* @param cmds linux命令 or shell脚本
* @return
* @throws Exception
*/
public int exec(String cmds) throws Exception {
//linux中标准输出
InputStream stdOut = null;
//linux中标准错误输出
InputStream stdErr = null;
String outStr = "";
String outErr = "";
//linux命令返回值:即$?
int ret = -1;
try {
if (login()) {
//开启一个会话
Session session = conn.openSession();
//执行命令
session.execCommand(cmds);
//获取一个标准输出
stdOut = new StreamGobbler(session.getStdout());
//通过通用方法转化成字符串
outStr = processStream(stdOut, charset);
//获取一个标准错误输出
stdErr = new StreamGobbler(session.getStderr());
//通过通用方法转化成字符串
outErr = processStream(stdErr, charset);
//设置超时
session.waitForCondition(ChannelCondition.EXIT_STATUS, TIME_OUT);
//命令返回值 $?
ret = session.getExitStatus();
} else {
throw new Exception("登录"+ip+"失败!");
}
} finally {
if (conn != null) conn.close();
IOUtils.closeQuietly(stdOut);
IOUtils.closeQuietly(stdErr);
}
System.out.println("outStr=" + outStr);
System.out.println("outErr=" + outErr);
System.out.println("ret=" + ret);
return ret;
}
public static void main(String args[]) throws Exception {
ShellExecutorUtil executor = new ShellExecutorUtil("IP地址", "用户名", "密码");
System.out.println(executor.exec("脚本 位置参数或者命令)"));
}
}
猜你喜欢
- 2024-10-20 编程语言第一:JAVA——认识Linux操作系统
- 2024-10-20 「Linux」05节-服务器状态查看(linux系统查看服务器配置命令)
- 2024-10-20 linux系统上安装java1.7.0.80(linux系统上安装java1.7.0.80怎么解决)
- 2024-10-20 Linux查看硬件信息超强命令sar,以及可视化工具ksar
- 2024-10-20 linux 安装基础软件-jdk-mysql-tomcat
- 2024-10-20 linux find 模糊查找文件(名称,大小,时间,新旧)
- 2024-10-20 oracle常见错误问题汇总—1(oracle错误大全)
- 2024-10-20 Linux常用查找命令大全,再也不用到处百度了
- 2024-10-20 顶级安全专家带你解决linux初学问题
- 2024-10-20 ElasticSearch快速入门(elasticsearch教程)
你 发表评论:
欢迎- 07-21如何将 iPhone 中的联系人导出到 Excel/CSV?
- 07-21sql查询的字段数据中有逗号。放到csv文件会分开,如何解决?
- 07-21在 WebAPI 里生成 csv zip 文件(webapi怎么发布在iis上)
- 07-21如何把csv格式转换成Excel格式(csv格式怎么转换)
- 07-21如何将高程导出为XYZ或CSV高程点(如何将高程数据导入cad)
- 07-21使用python把csv汇总成excel(python怎么将csv文件中的列存入列表)
- 07-21解决PHP导出CSV文件中文乱码问题(php导出excel文件)
- 07-21使用vba将Excel 文件转成 CSV 文件
- 最近发表
-
- 如何将 iPhone 中的联系人导出到 Excel/CSV?
- sql查询的字段数据中有逗号。放到csv文件会分开,如何解决?
- 在 WebAPI 里生成 csv zip 文件(webapi怎么发布在iis上)
- 如何把csv格式转换成Excel格式(csv格式怎么转换)
- 如何将高程导出为XYZ或CSV高程点(如何将高程数据导入cad)
- 使用python把csv汇总成excel(python怎么将csv文件中的列存入列表)
- 解决PHP导出CSV文件中文乱码问题(php导出excel文件)
- 使用vba将Excel 文件转成 CSV 文件
- python爬虫25 | 爬取的数据怎么保存?CSV了解一下
- MySQL 导出数据(mysql 导出数据 判断成功)
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)