当前位置: 首页 > news >正文

java实现连接linux(上传文件,执行shell命令等)

1 导入pom

 <dependency><groupId>com.jcraft</groupId><artifactId>jsch</artifactId><version>0.1.55</version></dependency>

2 编写配置类

package com.budwk.app.atest;import com.budwk.app.common.config.AppException;
import com.jcraft.jsch.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.util.IOUtils;
import org.nutz.ioc.loader.annotation.IocBean;import java.io.*;
import java.util.ArrayList;
import java.util.List;@Config
@Slf4j
public class JSchSessionComponent {private static final String ip = "172.168.1.1";private static final int port = 22;private static final String userName = "root";private static final String password = "123456";/*** jsch创建连接* @return*/public Session getJSchSession(){JSch jSch = new JSch();Session session = null;try {//创建连接session = jSch.getSession(userName,ip,port);session.setPassword(password);//是否使用密钥登录,一般默认为nosession.setConfig("StrictHostKeyChecking", "no");boolean connected = session.isConnected();if (connected) {return session;}//启用连接session.connect(15222200);log.info("服务器连接成功");return session;}catch (Exception e){log.error("服务器连接失败", e);throw new AppException("服务器连接失败");}}//jsch关闭连接public void closeJSchSession(Session session){log.info("关闭连接开始");if (session != null) {session.disconnect();log.info("关闭连接结束");}}public boolean uploadFile(Session sshSession, File file) {log.info("文件正在上传中,请等待......");boolean isSuccess = false;InputStream is = null;try {Channel channel = sshSession.openChannel("sftp");channel.connect();ChannelSftp sftp = (ChannelSftp) channel;sftp.cd("/data/www/wk-mini/");//上传时接文件的服务器的存放目录String fileName =file.getName();is = new FileInputStream(file);sftp.put(is, fileName, ChannelSftp.OVERWRITE);//有重名文件覆盖log.info("文件上传结束");isSuccess = true;} catch (Exception e) {log.error("linux upload File error:", e);throw new AppException("文件上传失败");} finally {IOUtils.closeQuietly(is);}return isSuccess;}public List<String> executeShell(Session session , List<String> commands){log.info("项目开始启动,请等待");//用来存放命令的返回值List<String> cmdResult = new ArrayList<>();for (String command : commands) {Channel channel = null;try {//创建执行通道channel = session.openChannel("exec");//设置命令((ChannelExec) channel).setCommand(command);//连接通道channel.connect();//读取通道的输出InputStream in = channel.getInputStream();BufferedReader reader = new BufferedReader(new InputStreamReader(in));//存放命令的执行结果,如果结果有很多行,则每次line的值不同String line;//lines用来拼接line结果StringBuffer lines = new StringBuffer();while ((line = reader.readLine()) != null) {//去除头尾的空格line.trim();lines = lines.append(line);}//如果命令执行没有返回值,则直接输出没有返回值if (String.valueOf(lines).equals("")){cmdResult.add("命令["+command+"]执行成功,但没有返回值");}else {//否则将每行返回直接存入到list中cmdResult.add(String.valueOf(lines));}reader.close();channel.disconnect();} catch (Exception e) {log.error("启动失败", e);throw new AppException("启动失败");}}log.info("项目启动已结束..................");return cmdResult;}
}

3 测试

package com.budwk.app.atest;import com.jcraft.jsch.*;
import org.nutz.ioc.loader.annotation.IocBean;import java.io.*;
import java.util.ArrayList;
import java.util.List;@IocBean
public class TestDemo {public static void main(String[] args) {// 1 先建立连接JSchSessionComponent jSchSessionComponent = new JSchSessionComponent();Session session = jSchSessionComponent.getJSchSession();File file = new File("E:\\target\\111.jar");
//        File file = new File("E:\\target\\1.txt");boolean b = jSchSessionComponent.uploadFile(session, file);if (b) {System.out.println("文件上传成功");}jSchSessionComponent.closeJSchSession(session);//        TestDemo t = new TestDemo();
//        t.executeSheel();}private void executeSheel() {JSchSessionComponent jSchSessionComponent = new JSchSessionComponent();Session session = jSchSessionComponent.getJSchSession();// 执行命令List<String> cmds = new ArrayList<>();cmds.add("cd /data/www/;chmod u+x start.sh;./start.sh");jSchSessionComponent.executeShell(session, cmds);}//用来执行命令//Session表示传递连接对话,commands表示传递命令集合}

4 start.sh文件内容体

# sh  ./monitorstart.sh
# sh  ./jobstart.sh#!/bin/sh
RESOURCE_NAME=wkProject.jartpid=`ps -ef|grep $RESOURCE_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
echo 'Stop Process...'
kill -15 $tpid
fi
sleep 5
tpid=`ps -ef|grep $RESOURCE_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
echo 'Kill Process!'
kill -9 $tpid
else
echo 'Stop Success!'
fitpid=`ps -ef|grep $RESOURCE_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; thenecho 'App is running.'
elseecho 'App is NOT running.'
firm -f tpid
rm -f wkProject.log
nohup java -jar ./$RESOURCE_NAME >>wkProject.log  2>&1 &
echo $! > tpid
echo Start Success!

相关文章:

java实现连接linux(上传文件,执行shell命令等)

1 导入pom <dependency><groupId>com.jcraft</groupId><artifactId>jsch</artifactId><version>0.1.55</version></dependency> 2 编写配置类 package com.budwk.app.atest;import com.budwk.app.common.config.AppExceptio…...

苹果企业签名和TF签名都是iOS内测中的常见方法有哪些?

苹果企业签名是使用苹果企业开发者账号对苹果安装包&#xff08;IPA&#xff09;进行打包的一个过程&#xff0c;它基于非对称加密算法实现&#xff0c;表示该苹果企业账号认可了这份数据&#xff0c;然后发送给其他人。企业签名后的APP无需上架到App Store&#xff0c;可绕开苹…...

CC++输入输出流介绍

介绍 C中的输入输出流主要包括标准输入输出流、文件输入输出流和内存数据流。 标准输入输出流可以通过使用cin和cout进行数据的读取和输出文件输入输出流可以通过使用ifstream和ofstream对文件进行读写操作内存数据流可以通过使用stringstream对字符串进行读写操作 应用举例…...

leedcode 刷题 - 除自身以外数组的乘积 - 和为 K 的子数组

I238. 除自身以外数组的乘积 - 力扣&#xff08;LeetCode&#xff09; 给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在…...

uniapp 富文本以及移动端富文本的展示问题

富文本展示有几种方式: 1.<view v-html"content"></view> 2. uniapp自带组件 rich-text rich-text | uni-app官网 <rich-text :nodes"content"></rich-text> 3.uView组件 u-parse Parse 富文本解析器 | uView 2.0 - 全面兼…...

JAVA sql 查询

-- 1. 查询员工表所有数据&#xff0c;并说明使用*的缺点 SELECT * from employees -- *号查询效率低 -- 2. 查询所员工的 email 全名,公司 email 统一以 "qq.com " 结尾. SELECT email from employees WHERE email like "%qq.com" -- 3. 打印公司里…...

掌握Katalon Studio 导入 swagger 接口文档,接口测试效率提升100%

katalon studio大家都已经不陌生了&#xff0c;是一款现在非常主流的自动化测试工具&#xff0c;包括了web、api、APP&#xff0c;甚至PC应用程序都可以使用它来完成自动化测试。 swagger是一款RESTFUL接口的文档在线自动生成软件&#xff0c;swagger是一个规范和完整的框架&a…...

程序员最奔溃的瞬间

作为一名程序员&#xff0c;我刚刚步入职场不久&#xff0c;经历了许多有趣又令人崩溃的瞬间。这些瞬间让我既感到气馁又好笑&#xff0c;同时也让我更加坚定了对编程的热爱和追求。 首先&#xff0c;我想分享一个令我崩溃的瞬间。有一天&#xff0c;我在调试一个复杂的bug时花…...

java字符串的常见用法

java字符串的常见用法 Java中的字符串是一个非常常用的对象&#xff0c;它属于Java的内置类String类的实例。字符串在Java中是不可变的&#xff0c;即一旦创建了一个字符串对象&#xff0c;就不能修改它的值。 下面是一些关于Java字符串的详细用法&#xff1a; 1&#xff09;创…...

链表OJ--下

文章目录 前言一、链表分割二、环形链表I三、环形链表II四、链表的回文结构五、随机链表的复制 前言 一、链表分割 牛客网CM11&#xff1a;链表分割- - -点击此处传送 题解&#xff1a; 思路图&#xff1a; 代码&#xff1a; 二、环形链表I 力扣141&#xff1a;环形链表…...

FreeRTOS源码阅读笔记4--semphr.h

信号量是特殊的队列--无法存储消息的队列&#xff0c;相关的接口函数声明在semphr.h中&#xff0c;通过宏定义替换队列函数实现。 4.1创建二值信号量xSemaphoreCreateBinary() 4.1.1函数原型 queueQUEUE_TYPE_BINARY_SEMAPHORE&#xff1a;一个宏&#xff0c;表示创建队列的…...

面试:MyBatis问题

文章目录 什么是MyBatis?MyBatis的核心组件有哪些&#xff1f;能说说MyBatis的工作原理吗&#xff1f;MyBatis的工作流程是怎样的&#xff1f;Mybaits 的优点 & 缺点MyBatis 与 JPA 有哪些不同&#xff1f;MyBatis一二级缓存的区别&#xff1f;MyBatis如何处理延迟加载&am…...

vue中页面(路由)跳转及传值的几种方式 router-link + query + params

vue中页面(路由)跳转及传值的几种方式 知道query 和 params 是什么 参考文案:https://www.php.cn/js-tutorial-382859.html 跳转的几种方式与传值 1、router-link 1.1 根据路由路径(无参数与有参数) <router-link to = "/page">跳转到page页面</…...

媒体格式转换软件Permute 3 mac中文版软件特点

Permute mac是一款媒体格式转换软件&#xff0c;可以帮助用户快速地将各种音频、视频和图像文件转换成所需格式&#xff0c;并提供了一些常用工具以便于用户进行编辑和处理。 Permute mac软件特点 - 支持大量格式&#xff1a;支持几乎所有常见的音频、视频和图像格式&#xff…...

Docker实用篇

Docker实用篇 0.学习目标 1.初识Docker 1.1.什么是Docker 微服务虽然具备各种各样的优势&#xff0c;但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中&#xff0c;依赖的组件非常多&#xff0c;不同组件之间部署时往往会产生一些冲突。在数百上千台服务中重复部署…...

开启数据库审计(db,extended级别或os级别),并将审计文件存放到/home/oracle/audit下

文章目录 开启数据库审计&#xff08;db,extended级别或os级别&#xff09;&#xff0c;并将审计文件存放到/home/oracle/audit下一. 简介二. 配置2.1. 审计是否安装2.2. 审计表空间迁移2.3. 审计参数2.4. 审计级别2.5. 其他审计选项2.6. 审计相关视图 三. 使用3.1. 开启/关闭审…...

单片机语音芯片开发要解决的问题

在单片机语音芯片开发过程中&#xff0c;可能会遇到多种问题&#xff0c;这些问题可能来自于技术层面&#xff0c;也可能来自于芯片本身的设计和应用层面。下面让我们具体从芯片的功耗、语音识别的准度、芯片的尺寸和芯片的可靠性四个方面开展讨论。 1.芯片的功耗问题 首先&a…...

Cesium 展示——地球以及渲染数据导出(下载)为图片或 pdf

文章目录 需求分析新加需求分析第一种方式第二种方式需求 将 Cesium 球体以及渲染数据导出为 jpg/png/pdf 分析 获取场景 scene 信息,转为image 的 octet-stream 流 进行下载为图片 /*** @todo canvas 导出图片* @param {string} dataurl - 地址* @return {Blob}*/ functio…...

大数据平台红蓝对抗 - 磨利刃,淬精兵! | 京东云技术团队

一、背景 目前大促备战常见备战工作&#xff1a;专项压测&#xff08;全链路压测、内部压测&#xff09;、灾备演练、降级演练、限流、巡检&#xff08;监控、应用健康度&#xff09;、混沌演练&#xff08;红蓝对抗&#xff09;&#xff0c;如下图所示。随着平台业务越来越复…...

java游戏制作-王者荣耀游戏

一.准备工作 首先创建一个新的Java项目命名为“王者荣耀”&#xff0c;并在src下创建两个包分别命名为“com.sxt"、”com.stx.beast",在相应的包中创建所需的类。 创建一个名为“img”的文件夹来储存所需的图片素材。 二.代码呈现 package com.sxt;import javax.sw…...

Pandas快速数据分析实战:紧急需求处理技巧

## 1. 项目概述&#xff1a;当数据分析遇上"快餐文化"上周三凌晨两点&#xff0c;市场部的同事突然发来一份300MB的销售数据&#xff0c;要求"天亮前给出关键趋势摘要"。这种场景下&#xff0c;优雅的代码架构和完美的数据管道都是奢侈品——我们需要的是像…...

Claude Code技能精选指南:从信息过载到高效AI工作流构建

1. 项目概述&#xff1a;一份为Claude Code深度用户量身定制的技能精选指南如果你正在使用Claude Code&#xff0c;并且已经厌倦了在GitHub、skills.sh、LobeHub等各个平台间来回穿梭&#xff0c;只为寻找一个真正能提升工作效率的Skill&#xff0c;那么你找对地方了。这个名为…...

TCP、UDP、ARP、Socket 与网络加密协议知识点整理——【2026】软考中级知识整理

TCP、UDP、ARP、Socket 与网络加密协议知识点整理 在计算机网络中&#xff0c;TCP、UDP、IP、ARP、ICMP、Socket、PPP、IPSec 等概念经常一起出现&#xff0c;也容易混淆。本文主要从协议层次、核心作用、典型应用和考试常见考点几个角度进行整理。 出自&#xff1a;智澈乐尚网…...

【限时开放】Docker AI Toolkit 2026企业版Beta通道关闭倒计时:3天内未注册将永久失去GPU调度优先权与联邦学习插件

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Docker AI Toolkit 2026企业版Beta通道关闭前的关键认知 Docker AI Toolkit 2026企业版Beta通道将于2024年11月30日23:59&#xff08;UTC8&#xff09;正式终止注册与镜像拉取权限。所有未完成许可证绑…...

2025届必备的AI学术助手横评

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek DeepSeek身为人工智能写作工具&#xff0c;能对学术论文撰写流程予以有效支撑&#xff0c;于…...

从‘预测准不准’到‘模型好不好’:一个Kaggle案例带你吃透回归评估指标(含R2、RMSEP、RPD详解)

从Kaggle实战到模型评估&#xff1a;回归指标的全维度解析与实战应用 在数据科学领域&#xff0c;构建一个回归模型只是开始&#xff0c;真正考验功力的是如何准确评估模型表现。很多初学者会陷入一个误区——只关注预测结果是否"看起来准确"&#xff0c;而忽略了系统…...

【优化求解】带惯性项的自适应交替方向乘子法iADMMn求解带正则化的逻辑回归矩阵分解问题(对比ADMM和梯度下降法GD算法)【含Matlab源码 15370期】

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;Matlab武动乾坤博客之家&#x1f49e;…...

如何快速掌握OpenFace面部行为分析:新手到专家的完整实战指南

如何快速掌握OpenFace面部行为分析&#xff1a;新手到专家的完整实战指南 【免费下载链接】OpenFace OpenFace – a state-of-the art tool intended for facial landmark detection, head pose estimation, facial action unit recognition, and eye-gaze estimation. 项目地…...

微信小程序图片裁剪终极实战:we-cropper完整开发指南

微信小程序图片裁剪终极实战&#xff1a;we-cropper完整开发指南 【免费下载链接】we-cropper 微信小程序图片裁剪工具 项目地址: https://gitcode.com/gh_mirrors/we/we-cropper we-cropper是一款专为微信小程序设计的轻量级canvas图片裁剪工具&#xff0c;能够帮助开发…...

距离答辩还有1周,有什么降AI工具能一键去除aigc痕迹?

一、前言&#xff1a;2026 年毕业必须通过aigc检测 2026年各高校对学术论文的AIGC疑似度的审查全面变严&#xff0c;均发布了具体AIGC检测报告和数值要求&#xff0c;211和985高校规定本科论文AI率要低于20%&#xff0c;硕士要求 AI 率不高于15%。普通高校一般要求AI率控制在 …...