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

相关推荐

  • 单例模式设计

    技术单例模式设计 单例模式设计1、饿汉式/*** 饿汉式:直接创建对象,不管你是否需要,都会创建这个对象;** 1、构造器私有化* 2、自动创建,并且用静态保存* 3、向外提供这个实例* 4、强调这是一

    礼包 2021年12月22日
  • 无法复制到剪贴板,CAD无法复制到粘贴板怎么办

    技术无法复制到剪贴板,CAD无法复制到粘贴板怎么办复制粘贴应该算是日常办公的必备操作技能啦!当然无法复制到剪贴板,在CAD制图中也不例外,不知道小伙伴们有没有遇到过CAD无法复制到粘贴板的情况?这到底是什么原因呢?那么,

    生活 2021年10月30日
  • 冬天来了写一段话,冬天的早晨真冷呀写一段话

    技术冬天来了写一段话,冬天的早晨真冷呀写一段话早上,冬天的风啊,真讨厌,我只开着一扇窗户,它就拼命的往我房间里钻,惊醒了我这个小懒虫冬天来了写一段话。我伸了伸懒腰,打了个哈欠,说:冬天啊真冷,恨不得整天睡大觉。虽然我已经

    生活 2021年10月27日
  • 如何把word压缩小一点

    技术如何把word压缩小一点这篇文章给大家分享的是有关如何把word压缩小一点的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。  使用工具:迅捷压缩  工具介绍:  迅捷压缩软件是一款集图片压缩

    攻略 2021年10月26日
  • 香港服务器租用为什么要选择大品牌

    技术香港服务器租用为什么要选择大品牌很多香港地区的机房服务商提供的服务器看上去虽然配置参数都是差不多的,但是在价格的差别是比较大的,因此对于用户来说如何选择合适自己的服务器,其实最推荐的还是租用有品牌的大型服务商,下面就

    礼包 2021年10月20日
  • golang自定义json化(golang 调用接口并更新本地数据)

    技术如何用golang源码分析json.Marshal如何用golang源码分析json.Marshal,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。G

    攻略 2021年12月13日