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

相关推荐

  • 农村医保网上如何缴费,怎么在网上给农村合作医疗缴费

    技术农村医保网上如何缴费,怎么在网上给农村合作医疗缴费可以用建设银行APP农村医保网上如何缴费,登录医保缴费,进行缴纳。1、打开建设银行APP,点击页面左上角箭头指的的地方。登录个人账户。2、点击右下角“悦享生活”。3、

    生活 2021年10月30日
  • 千什么万什么的成语,千什么万什么的四字成语

    技术千什么万什么的成语,千什么万什么的四字成语千军万马千什么万什么的成语、千言万语、千丝万缕、千山万水、千变万化、千头万绪、 千真万确、千刀万剐、千呼万唤、千辛万苦、千秋万代、千岩万壑、 千山万壑、千家万户、千沟万壑、千

    生活 2021年10月28日
  • Pandas怎样快速实现周、月、季度的日期聚合统计

    技术Pandas怎样快速实现周、月、季度的日期聚合统计Pandas怎样快速实现周、月、季度的日期聚合统计,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。大

    2021年11月15日
  • 交易所eos节点(如何在eos钱包充值到交易所)

    技术交易所通过eosjs进行充值与转账的代码片段是怎样的交易所通过eosjs进行充值与转账的代码片段是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望

    攻略 2021年12月14日
  • 抖音刷赞网站推广平台,抖音刷赞专业平台?

    技术抖音刷赞网站推广平台,抖音刷赞专业平台?要想刷赞的话,内容的创作,后期的运营是关键,看那些大段短15秒钟的视频就能如此吸赞,背后是一整套运作流程的支持。
    一、热门视频带来的流量,一般一个视频在上热之后会增加大量的赞丝

    测评 2021年11月9日
  • 抖音买10000粉要多少钱,抖音在哪里花钱买粉丝?

    技术抖音买10000粉要多少钱,抖音在哪里花钱买粉丝?关于到现在教大家抖音真人粉购买的方法这个话题,相信很多小伙伴都是非常有兴趣了解的吧,因为这个话题也是近期非常火热的,那么既然现在大家都想要知道教大家抖音真人粉购买的方

    测评 2021年11月10日