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

相关推荐

  • 为什么看不到微信好友的朋友圈,为什么看不到微信好友的朋友圈

    技术为什么看不到微信好友的朋友圈,为什么看不到微信好友的朋友圈微信看不到对方的朋友圈估计是对方设置了权限为什么看不到微信好友的朋友圈,不允许你看她/他的朋友圈。或者是对方没有发过朋友圈,朋友圈里无内容。设置朋友圈查看权限

    生活 2021年10月27日
  • cad怎样测量面积,cad怎么计算图形面积

    技术cad怎样测量面积,cad怎么计算图形面积cad计算图形面积的方法如下cad怎样测量面积:1、打开cad图形,在菜单栏,点击“工具”,如下图所示。2、调出工具选项,用鼠标指着“查询Q”,激活查询命令,如下图所示。3、

    生活 2021年11月1日
  • leetcode数组找最大数(leetcode排序中查找元素)

    技术LeetCode如何在排序数组中查找元素的第一个和最后一个位置这篇文章主要介绍LeetCode如何在排序数组中查找元素的第一个和最后一个位置,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! 一

    攻略 2021年12月15日
  • 微信sdk里有没有验证签名的方法(微信两个项目共用jssdk签名)

    技术微信JS-SDK签名接口怎么用这篇文章给大家分享的是有关微信JS-SDK签名接口怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。首先我们看一下微信公众号开发关于微信JS-SDK的使用说

    攻略 2021年12月24日
  • bytes最大值(数据类型的字节大小)

    技术为什么bytes的值比maxbytes的值要大这篇文章主要讲解了“为什么bytes的值比maxbytes的值要大”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“为什么b

    攻略 2021年12月22日
  • HTML5新特性有哪些

    技术HTML5新特性有哪些本篇内容主要讲解“HTML5新特性有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“HTML5新特性有哪些”吧!Web存储 它具有以下特征: 你可

    攻略 2021年12月10日