执行linux命令清理服务器缓存并返回结果怎么实现

技术执行linux命令清理服务器缓存并返回结果怎么实现这篇文章主要讲解了“执行linux命令清理服务器缓存并返回结果怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“

这篇文章主要讲解了”执行Linux操作系统操作系统命令清理服务器缓存并返回结果怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习”执行Linux操作系统操作系统命令清理服务器缓存并返回结果怎么实现”吧!

1、准备环境idea spingboot 2.0

dependenciedependencygroupidgor。弹簧框架。boot/group idartifactidspring-boot-starter/artifactId/dependencyddependencygroupidg。弹簧框架。boot/group idartifactidspring-boot-devtools/artifactiscoperentime/scope optionaltue/optional/dependency dependencygroupidg。阿帕奇。commons/group idartifactcommons-lang 3/artifactividuversion 3。3 .3 .2/version/dependency dependencygroupidg。ethz。ganymed/group

bsp; <scope>test</scope>        <exclusions>            <exclusion>                <groupId>org.junit.vintage</groupId>                <artifactId>junit-vintage-engine</artifactId>            </exclusion>        </exclusions>    </dependency></dependencies>

2.创建Boot启动类

@SpringBootApplication
// 开启定时任务 
@EnableSchedulingpublic class SshtimedtaskApplication {public static void main(String[] args) {
        SpringApplication.run(SshtimedtaskApplication.class, args);    }
}

3、创建逻辑类

目录结构化

                执行linux命令清理服务器缓存并返回结果怎么实现

  1.     根据spring ioc将定时任务注入容器,启动即开启

    @Component@Slf4jpublic class TimedTaskConfig { 
       
       @Resource   TimedTaskService timedTaskService;   //“0 15 10 ? * *” 测试 每天上午10:15触发成功   @Scheduled(cron="0 0 23 * * ?") //每晚凌晨 23点触发   public void clearLinuxProcess(){      log.info("获取远程服务器进程号开始:"+new Date());      String proceStr=timedTaskService.execGrepResult();//    String pro[]=proceStr.split(" ");      log.info("执行远程服务器结束掉进程 kill -9 "+proceStr);      timedTaskService.execKileProcess(proceStr);   }
    }

  2. TimedTaskService 定时任务 逻辑类

    @Slf4j@Servicepublic class TimedTaskService {   
       // ps -ef | grep xxx.log | grep -v grep | awk '{print $2}' 查询服务器上某个进程的进程号 这个我的是一个推送流的进程号   private static final String execFindGrep="ps -aux|grep rtsp_transport | grep -v grep | awk '{print $2}'";      private static final String killProcess="kill -9 "; 
          public String execGrepResult(){      log.info("准备执行命令:"+execFindGrep);      return ScpSshConnectionClient.execute(execFindGrep);// 查询返回的进程号   }   
       public void execKileProcess(String cmd){      log.info("准备执行命令:"+killProcess+cmd);      ScpSshConnectionClient.execute(killProcess+cmd);// 这里批量处理   }
       
    }

  3. ssh连接服务器

    /**  
     * ClassName:ScpSshConnectionClient <br/>  
     * Function: TODO ADD java操作 实现scp上传和下载文件. <br/>  
     * Reason:   TODO ADD 服务器相关. <br/>  
     * Date:     2020年8月28日 上午9:55:43 <br/>  
     * @author   wangmeng  
     * @version    
     * @since    JDK 1.8  
     * @see        
     */@Slf4jpublic class ScpSshConnectionClient {   
       private static final String IP="172.XXXXXXXX";// 远程服务器地址   private static final String USR="XXXX";// 远程服务器用户名      private static final String PSWORD="XXXXXXXX"; // 远程服务器密码    private static String  DEFAULTCHART="UTF-8";       private static Connection connection = new Connection(IP);// 创建对象    
       /**    * 
        * login:ssh用户登录验证,使用用户名和密码来认证. <br/>  
        * @author wangmeng  
        * @return  boolean    * @since JDK 1.8    */   public static boolean login(){      //创建远程连接,默认连接端口为22,如果不使用默认,可以使用方法      try {         connection.connect();         //使用用户名和密码登录 有秘钥可以使用authenticateWithPublicKey验证         return connection.authenticateWithPassword(USR,PSWORD);      } catch (IOException e) {   
             log.error("用户%s密码%s登录服务器%s失败!",USR,PSWORD,IP,e);     }     return false;   }   
       /**     * 远程执行shll脚本或者命令     * @param cmd     *      即将执行的命令     * @return     *      命令执行完后返回的结果值     */    public static String execute(String cmd){
            String result="";        try {           boolean isAuthed =login();            if(isAuthed && connection !=null){
                    Session session= connection.openSession();//打开一个会话                session.execCommand(cmd);//执行命令                result=processStdout(session.getStdout(),DEFAULTCHART);                //如果为得到标准输出为空,说明脚本执行出错了                if(StringUtils.isBlank(result)){log.info("得到标准输出为空,链接connection:"+connection+",执行的命令:"+cmd);                    result=processStdout(session.getStderr(),DEFAULTCHART);                }else{log.info("执行命令成功,链接connection:"+connection+",执行的命令:"+cmd);                }connection.close();                session.close();            }
            } catch (IOException e) {log.error("执行命令失败,链接connection:"+connection+",执行的命令:"+cmd+"  "+e.getMessage());            e.printStackTrace();        }return result;    }/**     * 解析脚本执行返回的结果集     * @param in 输入流对象     * @param charset 编码     * @return     *       以纯文本的格式返回     */    private static String processStdout(InputStream in, String charset){
            InputStream  stdout = new StreamGobbler(in);        StringBuffer buffer = new StringBuffer();;        try {
                BufferedReader br = new BufferedReader(new InputStreamReader(stdout,charset));            String line=null;            while((line=br.readLine()) != null){
                    buffer.append(line+" ");            }
            } catch (UnsupportedEncodingException e) {log.error("解析脚本出错:"+e.getMessage());            e.printStackTrace();        } catch (IOException e) {log.error("解析脚本出错:"+e.getMessage());            e.printStackTrace();        }return buffer.toString();    }
    }

感谢各位的阅读,以上就是“执行linux命令清理服务器缓存并返回结果怎么实现”的内容了,经过本文的学习后,相信大家对执行linux命令清理服务器缓存并返回结果怎么实现这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/126277.html

(0)

相关推荐

  • utxo数据模型是什么(什么是utxo账户模型)

    技术比原链扩展性UTXO模型是什么本篇内容主要讲解“比原链扩展性UTXO模型是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“比原链扩展性UTXO模型是什么”吧!用户模型是

    攻略 2021年12月20日
  • mybatis日常语法有哪些

    技术mybatis日常语法有哪些mybatis日常语法有哪些,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。mybatis中的#和$的区别? #方式能够很大程

    攻略 2021年10月20日
  • 5肖臻区块链听课笔记

    技术5肖臻区块链听课笔记 5肖臻区块链_听课笔记去中心化升级小部分未升级,产生协议分叉,协议升级,新旧互相不合法,产生hard fork,只要旧的不更新,分叉一直有soft fork临时的,旧结点只能去

    礼包 2021年12月10日
  • opencv如何将两张图片拼图(opencv比较两张图片相似度)

    技术如何用OpenCV快速寻找图像差异处这期内容当中小编将会给大家带来有关如何用OpenCV快速寻找图像差异处,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。如何使用结构相似性指数(SS

    攻略 2021年12月15日
  • 塞下曲拼音版古诗,北师大版五年级下册的古诗有哪些?

    技术塞下曲拼音版古诗,北师大版五年级下册的古诗有哪些?千里送鹅毛缅伯高将鹅贡唐朝,山高路远遥塞下曲拼音版古诗。钙阳湖失去,倒地哭号号。上复唐天子,可饶缅伯高。礼轻人意重,千里送鹅毛。秋浦歌(唐)李白 炉火照天地,红星乱紫

    生活 2021年10月20日
  • 岁寒然后知松柏之后凋也的意思,岁寒然后知松柏之后凋也的作文

    技术岁寒然后知松柏之后凋也的意思,岁寒然后知松柏之后凋也的作文《论语》一书中,有这样一句经典语句:子曰,岁寒,然后知松柏之后凋也。这句话出自《论语·子罕》,意思是:只有天气寒冷了,我们才明白松柏是最后凋谢的岁寒然后知松柏

    生活 2021年10月28日