简单的java调动远程服务器shell脚本

简单的java调动远程服务器shell脚本

1.需求

我们想要在我们的xxl-job中调用一个定时任务,固定时间频率去调用另一个服务器的shell脚本,进行数据批量的处理,整体需求逻辑非常简单,此处记录一下java调用shell脚本部分,方便之后开发复习使用,xxl-job部分的配置此处就不多赘述了,此文主要记录调用shell部分逻辑。

2.具体实现

java中,我们可以使用JSch库来远程登录服务器并执行shell脚本即可,整体的逻辑也非常简单,具体实现步骤如下:

  • 准备执行脚本
    此处我们是测试脚本,随便编写一个测试脚本即可,我们在服务器创建一个test.sh的脚本,里面输出test ok

    # 创建目录文件
    mkdir /root/shell
    cd /root/shell
    # 其中shell脚本中只有 echo "test ok!"
    vim test.sh
    # 添加执行权限
    chmod +x test.sh
    

    在这里插入图片描述

  • 引入工具类maven坐标

     <!-- 远程执行shell --><dependency><groupId>com.jcraft</groupId><artifactId>jsch</artifactId><version>0.1.55</version></dependency>
    
  • 编写调用工具类

    package cn.git.controller;import cn.hutool.core.util.StrUtil;
    import com.jcraft.jsch.Channel;
    import com.jcraft.jsch.ChannelExec;
    import com.jcraft.jsch.JSch;
    import com.jcraft.jsch.Session;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;import java.io.InputStream;/*** 控制器用于远程执行shell脚本。** @program: bank-credit-sy* @author: lixuchun* @create: 2024-05-03*/
    @RestController
    @RequestMapping("/shell")
    public class ExecShellController {/*** 日志记录器*/private static final Logger logger = LoggerFactory.getLogger(ExecShellController.class);/*** 测试远程执行shell脚本的方法。** @return 返回执行结果的信息*/@RequestMapping("/exec")public String test() {// 定义远程服务器的登录信息,用户名称String user = "root";// 密码String password = "101022li";// 地址String host = "192.168.138.129";int port = 22; // 端口try {JSch jsch = new JSch();Session session = jsch.getSession(user, host, port);session.setPassword(password);// 设置配置避免首次连接时的确认提示session.setConfig("StrictHostKeyChecking", "no");// 建立连接,设定超时时间5ssession.connect(5000);// 准备执行的shell命令String execCommand = "sh /root/shell/test.sh";Channel channel = session.openChannel("exec");((ChannelExec) channel).setCommand(execCommand);// 不向远程服务器发送输入channel.setInputStream(null);// 将错误输出流重定向到标准错误输出((ChannelExec) channel).setErrStream(System.err);// 连接通道,设置超时时间为1s,单位为毫秒channel.connect(5000);// 读取shell脚本的标准输出StringBuilder result = new StringBuilder(StrUtil.EMPTY);try (InputStream in = channel.getInputStream()) {byte[] buffer = new byte[1024]; // 缓冲区大小int readCount;// 循环读取直到没有更多数据while ((readCount = in.read(buffer)) > 0) {result.append(new String(buffer, 0, readCount));}}// 获取结果信息logger.info("获取Result: {} ", result);// 断开连接channel.disconnect();session.disconnect();} catch (Exception e) {// 异常处理logger.error("执行 shell 脚本错误: {}", e.getMessage(), e);return "exec failed";}// 返回执行成功信息return "exec ok";}}

3.测试

我们通过页面访问进行简单测试 http://localhost:8088/shell/exec
在这里插入图片描述
后台执行结果如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1523658.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Redis应用(2)——Redis的项目应用(一)

/** * 雪花id的工具类 */ Slf4j public class SnowFlakeUtil { private static long workerId 0; private static long datacenterId 1; private static Snowflake snowflake IdUtil.getSnowflake(workerId,datacenterId); PostConstruct // 自动调用&#xff0c;在构造方法…

Python 与 Excel 图表自动化:让数据“会说话”

在数据驱动的时代&#xff0c;数据分析师、财务专家、销售经理们都离不开Excel——这个简单而强大的工具。而Excel图表是展现数据故事的不二之选。然而&#xff0c;手动创建图表不仅耗时&#xff0c;还容易出错。如何让这繁琐的工作变得简单&#xff1f;答案就是&#xff1a;Py…

网络安全服务基础Windows--第8节-DHCP部署与安全

DHCP协议理解 定义&#xff1a;DHCP&#xff1a;Dynamic Host Configuration Protocol&#xff0c;动态主机配置协议&#xff0c;是⼀个应⽤在局域⽹中的⽹络协议&#xff0c;它使⽤UDP协议⼯作。 67&#xff08;DHCP服务器&#xff09;和68&#xff08;DHCP客户端&#xff0…

如何在 Cursor IDE 中使用驭码CodeRider 进行 AI 编程?

驭码CodeRider 是极狐GitLab 公司自研发布的 AIGC 产品&#xff0c;可以用来进行 AI 编程和 DevOps 流程处理。本文分享如何在 Cursor 中使用驭码CodeRider。 Cursor 是近期比较火爆的一款 AI 代码编辑器&#xff0c;通过将 AI 能力引入软件研发来提升软件研发效率。而驭码Cod…

三级_网络技术_53_应用题

一、 请根据下图所示网络结构回答下列问题。 1.设备1应选用__________网络设备。 2.若对整个网络实施保护&#xff0c;防火墙应加在图中位置1~3的__________位置上。 3.如果采用了入侵检测设备对进出网络的流量进行检测&#xff0c;并且探测器是在交换机1上通过端口镜像方式…

CISAW认证涉及10个技术方向,到底哪个更适合您?

对于渴望在信息安全领域提升自己技能的你&#xff0c;CISAW&#xff08;信息安全保障人员&#xff09;认证无疑是一个理想的选择。 这项认证不仅适用于网络信息安全岗位的专业人员&#xff0c;还为那些寻求深化专业知识、提高职业竞争力的人士提供了宝贵的学习机会。 CISAW认…

【Linux】消息队列信号量

目录 消息队列 原理 接口 指令 信号量 概念 对于信号量理论的理解 信号量的操作 信号量的指令 消息队列 原理 消息队列提供了一个从一个进程向另外一个进程发送一个数据块的方法&#xff0c;每个数据块都有一个类型。对消息队列的的管理也是先描述&#xff0c;再组织…

开源网安引领AIGC+开发安全,智能防护铸就软件安全新高度

近日&#xff0c;国内网络安全领域知名媒体数说安全正式发布了《2024年中国网络安全市场100强》和《2024年中国网络安全十大创新方向》。开源网安凭借在市场表现力、资源支持力以及产品在AI方向的创新力上的优秀表现成功入选百强榜单&#xff0c;并被评为“AIGC开发安全”典型厂…

go发邮件的功能如何使用?新手必备的指南?

Go发邮件怎么实现发信功能&#xff1f;使用go发邮件的注意事项&#xff1f; 在这个数字化时代&#xff0c;电子邮件已成为我们日常沟通的重要工具。对于新手来说&#xff0c;掌握如何使用go发邮件功能是至关重要的。AokSend将详细介绍go发邮件的使用方法&#xff0c;帮助你快速…

分布式服务调用RPC框架复习

目录 1、Dubbo概念与架构 1.1 Dubbo简介 1.2 注册与发现流程图 1.3 Dubbo架构图 2、Dubbo调用流程 3、关于Dubbo 服务治理 3.1 Dubbo通信协议 3.2 序列化方式 3.3 负载均衡算法 4、Dubbo与Spring Cloud关系 4.1 相似之处 4.2 差异之处 5、Dubbo 与 gRPC 关系 6、…

【C/C++】web服务器项目开发总结【请求 | 响应 | CGI】

博客主页&#xff1a;花果山~程序猿-CSDN博客 文章分栏&#xff1a;Linux_花果山~程序猿的博客-CSDN博客 关注我一起学习&#xff0c;一起进步&#xff0c;一起探索编程的无限可能吧&#xff01;让我们一起努力&#xff0c;一起成长&#xff01; 目录 一&#xff0c;背景 二&…

使用 Milvus 和 Streamlit 搭建多模态产品推荐系统

我们可以使用 Milvus 搭建多模态 RAG 应用&#xff0c;用于产品推荐系统。用户只需简单上传一张图片并输入文字描述&#xff0c;Google 的 MagicLens 多模态 Embedding 模型就会将图像和文本编码成一个多模态向量。然后&#xff0c;使用这个向量从 Milvus 向量数据库中找到最相…

C++设计模式——Template Method模板方法模式

一&#xff0c;模板方法模式的定义 模板方法模式是一种行为型设计模式&#xff0c;它先定义了一个算法的大致框架&#xff0c;然后将算法的具体实现步骤分解到多个子类中。 模板方法模式为算法设计了一个抽象的模板&#xff0c;算法的具体代码细节由子类来实现&#xff0c;从…

【Linux】进程状态(RSDT 阻塞 僵尸 孤儿)

目录 进程状态 进程状态的查看 R和S 运行状态 T/t 暂停状态 kill命令 D &#xff08;disk sleep&#xff09;状态、 Z 状态&#xff08;僵尸状态&#xff09; 孤儿状态 运行状态 阻塞状态 进程状态 一个进程通常有三种状态 ◉ 就绪状态&#xff08;Ready&#xff0…

如何验证谷歌seo服务商的实力真假?

要验证谷歌SEO服务商的实力真假&#xff0c;可以通过几种简单有效的方法。 你可以要求对方通过视频会议或上门服务&#xff0c;展示谷歌官方后台的真实数据。 通过Google Search Console的实时数据&#xff0c;你可以直接看到他们为客户提供的服务效果&#xff0c;这样的数据是…

【加密社】如何根据.dat文件恢复密钥

加密社 看了这篇指南&#xff0c;你将了解助记词和密钥地址&#xff08;qianbao&#xff09;背后的基本原理。 以及&#xff0c;如何找回你的大饼密钥。 Not your key, not your coin 如果你不掌握自己加密货币钱包的私钥&#xff0c;那么你实际上并不能完全控制你的资产 在当今…

【STM32开发笔记】STM32H7S78-DK上的CoreMark移植和优化--兼记STM32上的printf重定向实现及常见问题解决

【STM32开发笔记】STM32H7S78-DK上的CoreMark移植和优化--兼记STM32上的printf重定向实现及常见问题解决 一、CoreMark简介二、创建CubeMX项目2.1 选择MCU2.2 配置CPU时钟2.3 配置串口功能2.4 配置LED引脚2.5 生成CMake项目 三、基础功能支持3.1 支持记录耗时3.2 支持printf输出…

基于FPGA的OV5640摄像头图像采集

1.OV5640简介 OV5640是OV&#xff08;OmniVision&#xff09;公司推出的一款CMOS图像传感器&#xff0c;实际感光阵列为&#xff1a;2592 x 1944&#xff08;即500w像素&#xff09;&#xff0c;该传感器内部集成了图像出炉的电路&#xff0c;包括自动曝光控制&#xff08;AEC…

内网渗透-域环境搭建

构建内网环境 在学习内网渗透测试时,需要构建一个内网环境并搭建攻击主机,通过具体操作理解漏洞的工作原理,从而采取相应的防范措施。 一个完整的内网环境,需要各种应用程序、操作系统和网络设备,可能比较复杂。我们只需要搭建其中的核心部分,也就是Linux服务器和 Windows服务…

复变函数在大模型中的应用

1. 导入 说来惭愧&#xff0c;我研究生时的研究方向是复分析&#xff0c;但毕业近十年来几乎没用到它。 我还记得实习时做自我介绍时&#xff0c;我说我的研究方向是复分析。面试官不太了解&#xff0c;我便解释说&#xff0c;这是关于对 -1 开平方得到的虚数 i 的研究。 在…