Spring Boot 2.x系列【28】应用篇之JAVA执行服务器操作命令

news2024/9/24 3:28:31

有道无术,术尚可求,有术无道,止于术。

本系列Spring Boot版本2.7.0

文章目录

    • 前言
    • 本地服务器
    • 远程服务器

前言

在某些实际开发场景中,我们需要调用JAVA程序去执行一些服务器操作命令,比如:

  • 获取服务器的CPU、网卡、内存、硬盘状态
  • 执行服务器上某个脚本

本地服务器

可以使用JDK自带的功能在当前应用程序运行的服务器上进行操作。

Runtime类封装了运行时环境,可以调用Runtime对象的方法去执行服务器操作命令。

Runtime.exec方法创建一个本地进程,并返回一个Process子类的实例,该子类可用于控制进程并获取有关它的信息。Process类提供了从进程执行输入、向进程执行输出、等待进程完成、检查进程的退出状态、破坏(杀死)过程等功能。

示例代码如下:

        // 获取当前应用程序的运行环境对象
        Runtime runtime = Runtime.getRuntime();
        // 1. 演示:执行ipconfig命令,获取IP信息
        // 执行对应的可执行文件或命令
        Process process = runtime.exec("ipconfig"); // Windows 命令
        // 获取返回结果
        InputStream inputStream = process.getInputStream();
        String ipInfo = IoUtil.read(inputStream, CharsetUtil.systemCharset());
        System.out.println(ipInfo);
        // 获取内存情况
        long totalMemory = runtime.totalMemory();
        long freeMemory = runtime.freeMemory();
        System.out.println("totalMemory:" + totalMemory);
        System.out.println("freeMemory:" + freeMemory);

执行结果:
在这里插入图片描述
也可以使用Hutool工具类库提供的工具类简化操作。

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.12</version>
</dependency>

示例代码如下:

        /**
         * exec 执行命令行命令,返回Process对象,Process可以读取执行命令后的返回内容的流
         * 快捷方法
         * execForStr 执行系统命令,返回字符串
         * execForLines 执行系统命令,返回行列表
         */
        String result = RuntimeUtil.execForStr("ipconfig");

远程服务器

应用程序想通过JAVA远程服务器上执行命令,就必须连接到远程。

比如Linux 服务器时,需要使用SSH协议进行连接。有很多开源的框架已经实现,比如下面这三个:

        <dependency>
            <groupId>com.hierynomus</groupId>
            <artifactId>sshj</artifactId>
            <version>0.32.0</version>
        </dependency>
        <dependency>
            <groupId>ch.ethz.ganymed</groupId>
            <artifactId>ganymed-ssh2</artifactId>
            <version>262</version>
        </dependency>
        <dependency>
            <groupId>com.jcraft</groupId>
            <artifactId>jsch</artifactId>
            <version>0.1.54</version>
        </dependency>

Hutool也提供了这种功能实现,官方文档。

        // 新建会话,此会话用于ssh连接到跳板机(堡垒机)
        Session session = JschUtil.getSession("192.168.6.25", 22, "root", "2123!@#");
        String exec = JschUtil.exec(session, "df -h", CharsetUtil.systemCharset());
        System.out.println(exec);
        JschUtil.close(session);

执行结果:
在这里插入图片描述

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

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

相关文章

牛逼的不停服定位线上问题-arthas

​ Hello&#xff0c;大家好我是你们可爱的小花。 前言 你是不是为了生产环境问题&#xff0c;无法定位、无法中断、无法解决 项目无故异常&#xff0c;日志无报错、报错不够明确 测试环境无法复现、生产环境问题偶发 但重启项目后问题消失&#xff0c;无法给领导一个答复而苦…

ChatGPT冷观察:没有大模型的土壤,开不出ChatBot的花

文|智能相对论作者|叶远风谁在跟风&#xff0c;谁又有真本事能做出中国版的对标产品来&#xff1f;这恐怕是ChatGPT这股热潮以来&#xff0c;关心中国AI发展的业界人士最想问的问题。或者说&#xff0c;在中国人工智能不落后于全世界的当下&#xff0c;业界也在普遍渴望一个真正…

AWS Directory Service

Hello大家好&#xff0c;我们接下来讨论AWS Directory Service&#xff0c;AWS目录服务的内容。 什么是微软活动目录&#xff08;AD&#xff09; 在认证考试中有很多的考点是关于微软AD部分的&#xff0c;也就是微软活动目录以及AWS活动目录服务—AWS Directory Service的内容…

PowerShell Install Mysql 8

MySQL介绍 MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。 mysql download Mysql Serverdownload创建一键安装Mysql 8自动化脚本 Expand-Archive #解压文件Start-P…

【我有一个梦想:帮你实现你的梦想】

很多人都曾有过这样的经历&#xff0c;某天突然对某个东西产生了兴趣&#xff0c;于是兴致勃勃的开始在网上各种搜&#xff0c;各种查&#xff0c;去各大论坛到处看到处问&#xff0c;在网上搜集很多免费的电子书&#xff0c;看了很多视频&#xff0c;最后忙活了一阵子&#xf…

若依框架如何新增自定义主题风格

若依框架新增主题风格1.实现结果2.实现步骤2.1Settings目录下2.2 variables.scss2.3 sidebar.scss2.4 Logo.vue2.5 Siderbar目录下的index.vue1.实现结果 2.实现步骤 需要改动的文件目录&#xff1a; 2.1Settings目录下 <div class"setting-drawer-block-checbox-it…

DBeaver:开源、跨平台、强大的数据库管理工具

文章目录一、简介1.DBeaver 是什么2.DBeaver 的功能3.DBeaver 的优点二、安装与配置1.系统要求2.下载与安装3.连接数据库三、总结一、简介 1.DBeaver 是什么 DBeaver 是一个流行的开源数据库客户端&#xff0c;它可以用于连接和管理多种不同类型的数据库系统&#xff0c;包括…

什么是STAR原则?

文章目录&#x1f4cb;前言&#x1f525;省流版&#x1f3af;什么是STAR原则&#x1f3af;进行过程&#x1f4cb;前言 对于大部分还在学习阶段的学生们来说&#xff0c;可能并不了解这个原则的含义&#xff0c;这里的star并不是指英文单词星星。这个原则我也是前段时间才认识到…

CS224W课程学习笔记(二):网络图的特征说明和指标实战

引言 在第二三节课中&#xff0c;主要研究的是四个关键网络属性以表征图形&#xff1a;度分布&#xff0c;路径长度&#xff0c;聚类系数和连接组件 。 这些定义主要是针对无向图的&#xff0c;而由于上一节中已经介绍了度分布&#xff0c;以及相应公式和例题&#xff0c;关于…

刚性电路板的特点及与柔性电路板的区别

打开市场上的任何一个电子产品&#xff0c;会发现里面都有一块或多块电路板。电路板是电子产品运行的核心&#xff0c;之前沐渥小编已经给大家介绍了柔性电路板&#xff0c;下面给大家介绍刚性电路板的基础知识。 刚性电路板俗称硬板&#xff0c;是由不容易变形的刚性基材制成的…

MASA Stack 1.0 发布会 —— 社区问题解答

MASA Stack 1.0 圆桌讨论 Q1&#xff1a; 全职开源的团队&#xff0c;你们的收入是什么&#xff1f; 1.首先感谢我们的金主朗诗德公司&#xff0c;朗诗德是一家大型的净水器研发、生产、销售的公司&#xff0c;我们的产品也在朗诗德公司进行了大量的落地验证&#xff0c;再次…

Kotlin新手教程二(Kotlin基本数据类型及基础语法)

一、基本数据类型 1.数字 由于Kotlin支持类型推断&#xff0c;所以在使用时若超出Int的范围则会被认定为其它类型&#xff1b;若需要显式指定Long型值&#xff0c;则需要在值后添加L后缀。 2.浮点数 3.比较两个数&#xff08; 和 &#xff09; Kotlin 中没有基础数据类型&a…

C语言(输出scanf()函数)

一.概念带入 scanf()把输入的字符串转换成整数&#xff0c;浮点数&#xff0c;字符或字符串。而printf()正好与其相反&#xff0c;把整数&#xff0c;浮点数&#xff0c;字符和字符串转换成显示在屏幕上的文本。所以scanf&#xff08;&#xff09;在使用上面会和printf有很多一…

实验十四、共源放大电路的频率响应

一、题目 利用 Multisim 从下列两个方面研究图1所示电路的频率响应。图1共源放大电路图1\,\,共源放大电路图1共源放大电路&#xff08;1&#xff09;为改善低频特性&#xff0c;应增大三个耦合电容中的哪一个最有效。 &#xff08;2&#xff09;场效应管的漏极静态电流对上限频…

审批流、工作流、业务流

是业务流、工作流、审批流 业务流&#xff1a;即业务流程&#xff0c;指为了完成某项业务而进行的各种工作的有序组合 工作流&#xff1a;即工作流程&#xff0c;指为了完成某项工作而进行的各种动作的有序组合 审批流&#xff1a;即审批流程&#xff0c;是对某项工作的审批活动…

记录一次服务器被攻击的经历

突然收到阿里云发过来的异常登陆的信息&#xff1a; 于是&#xff0c;急忙打开电脑查看对应的ECS服务器的记录&#xff1a; 发现服务器的cpu占用率异常飙升&#xff0c;所以可以大概断定服务器已经被非法入侵了。 通过自己的账号登陆后&#xff0c;发现sshd服务有异常的链接存…

TensorRT的命令行程序

TensorRT的命令行程序 文章目录TensorRT的命令行程序A.3.1. trtexecA.3.1.1. Benchmarking NetworkA.3.1.2. Serialized Engine GenerationA.3.1.3. trtexecA.3.1.4. 常用的命令行标志点击此处加入NVIDIA开发者计划 A.3.1. trtexec 示例目录中包含一个名为trtexec的命令行包装…

关于表的操作+1 数据库(4)

素材&#xff1a; 学生表&#xff1a;Student (Sno, Sname, Ssex , Sage, Sdept) 学号&#xff0c;姓名&#xff0c;性别&#xff0c;年龄&#xff0c;所在系 Sno为主键 课程表&#xff1a;Course (Cno, Cname) 课程号&#xff0c;课程名 Cno为主键 学生选课表&#xff1a;SC (…

常见的5大软件项目风险,如何进行规避?

1、客户没有或很少参与项目 日常项目开发中&#xff0c;容易出现这样的风险&#xff1a;客户在最开始的时候提交了一份文档&#xff0c;在项目启动、计划和执行阶段&#xff0c;客户没有参与&#xff0c;只是在项目收尾时进行验收&#xff0c;客户一旦发现开发结果与预期需求相…

第42天|LeetCode121. 买卖股票的最佳时机、LeetCode122. 买卖股票的最佳时机 II

1.题目链接&#xff1a;121. 买卖股票的最佳时机 题目描述&#xff1a; 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法…