执行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)

相关推荐

  • 如何配置Solr4.7的同义词

    技术Solr4.7的synonyms怎么配置这篇文章主要介绍“Solr4.7的synonyms怎么配置”,在日常操作中,相信很多人在Solr4.7的synonyms怎么配置问题上存在疑惑,小编查阅了各式资料,整理出简单好

    攻略 2021年12月22日
  • 如何探讨Java代理模式与反射机制的实际应用

    技术如何探讨Java代理模式与反射机制的实际应用如何探讨Java代理模式与反射机制的实际应用,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Java提供了一套

    攻略 2021年11月21日
  • dbms_xplan.display_cursor包与高级所有统计上次查看绑定区别是什么

    技术dbms_xplan.display_cursor包与ADVANCED ALLSTATS LAST PEEKED_BINDS区别是什么dbms_xplan.display_cursor包与ADVANCED ALLST

    攻略 2021年12月24日
  • apacheflink多个漏洞分析(apacheflink目录遍历漏洞修复)

    技术Apache Flink 目录遍历漏洞是怎样的本篇文章给大家分享的是有关Apache Flink 目录遍历漏洞是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一

    攻略 2021年12月21日
  • 幸福是什么医生说,对于90后来说,什么是幸福

    技术幸福是什么医生说,对于90后来说,什么是幸福感谢邀请幸福是什么医生说。对于90后来说,什么是幸福?大调查发现,90后的年轻人幸福感还是很高的,只有13.9%的年轻人感觉不幸福。他们对整体社会环境和生活状态的满意度都很

    生活 2021年10月28日
  • 付费SOCKS5代理的好处有哪些

    技术付费SOCKS5代理的好处有哪些本篇内容介绍了“付费SOCKS5代理的好处有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够

    攻略 2021年10月20日