溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

執(zhí)行l(wèi)inux命令清理服務(wù)器緩存并返回結(jié)果怎么實(shí)現(xiàn)

發(fā)布時(shí)間:2021-11-30 09:57:29 來源:億速云 閱讀:196 作者:iii 欄目:大數(shù)據(jù)

這篇文章主要講解了“執(zhí)行l(wèi)inux命令清理服務(wù)器緩存并返回結(jié)果怎么實(shí)現(xiàn)”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“執(zhí)行l(wèi)inux命令清理服務(wù)器緩存并返回結(jié)果怎么實(shí)現(xiàn)”吧!

1、準(zhǔn)備環(huán)境 idea spingboot 2.0

<dependencies>    <dependency>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter</artifactId>    </dependency>    <dependency>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-devtools</artifactId>        <scope>runtime</scope>        <optional>true</optional>    </dependency>    <dependency>        <groupId>org.apache.commons</groupId>        <artifactId>commons-lang3</artifactId>        <version>3.3.2</version>    </dependency>    <dependency>        <groupId>ch.ethz.ganymed</groupId>        <artifactId>ganymed-ssh3</artifactId>        <version>build210</version>    </dependency>    <dependency>        <groupId>org.projectlombok</groupId>        <artifactId>lombok</artifactId>        <optional>true</optional>    </dependency>    <dependency>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-test</artifactId>        <scope>test</scope>        <exclusions>            <exclusion>                <groupId>org.junit.vintage</groupId>                <artifactId>junit-vintage-engine</artifactId>            </exclusion>        </exclusions>    </dependency></dependencies>

2.創(chuàng)建Boot啟動(dòng)類

@SpringBootApplication
// 開啟定時(shí)任務(wù) 
@EnableSchedulingpublic class SshtimedtaskApplication {public static void main(String[] args) {
        SpringApplication.run(SshtimedtaskApplication.class, args);    }

}

3、創(chuàng)建邏輯類

目錄結(jié)構(gòu)化

                執(zhí)行l(wèi)inux命令清理服務(wù)器緩存并返回結(jié)果怎么實(shí)現(xiàn)

  1.     根據(jù)spring ioc將定時(shí)任務(wù)注入容器,啟動(dòng)即開啟

    @Component@Slf4jpublic class TimedTaskConfig { 
       
       @Resource   TimedTaskService timedTaskService;   //“0 15 10 ? * *” 測試 每天上午10:15觸發(fā)成功   @Scheduled(cron="0 0 23 * * ?") //每晚凌晨 23點(diǎn)觸發(fā)   public void clearLinuxProcess(){      log.info("獲取遠(yuǎn)程服務(wù)器進(jìn)程號(hào)開始:"+new Date());      String proceStr=timedTaskService.execGrepResult();//    String pro[]=proceStr.split(" ");      log.info("執(zhí)行遠(yuǎn)程服務(wù)器結(jié)束掉進(jìn)程 kill -9 "+proceStr);      timedTaskService.execKileProcess(proceStr);   }
    
    }


  2. TimedTaskService 定時(shí)任務(wù) 邏輯類

    @Slf4j@Servicepublic class TimedTaskService {   
       // ps -ef | grep xxx.log | grep -v grep | awk '{print $2}' 查詢服務(wù)器上某個(gè)進(jìn)程的進(jìn)程號(hào) 這個(gè)我的是一個(gè)推送流的進(jìn)程號(hào)   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("準(zhǔn)備執(zhí)行命令:"+execFindGrep);      return ScpSshConnectionClient.execute(execFindGrep);// 查詢返回的進(jìn)程號(hào)   }   
       public void execKileProcess(String cmd){      log.info("準(zhǔn)備執(zhí)行命令:"+killProcess+cmd);      ScpSshConnectionClient.execute(killProcess+cmd);// 這里批量處理   }
       
    
    }


  3. ssh連接服務(wù)器

    /**  
     * ClassName:ScpSshConnectionClient <br/>  
     * Function: TODO ADD java操作 實(shí)現(xiàn)scp上傳和下載文件. <br/>  
     * Reason:   TODO ADD 服務(wù)器相關(guān). <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";// 遠(yuǎn)程服務(wù)器地址   private static final String USR="XXXX";// 遠(yuǎn)程服務(wù)器用戶名      private static final String PSWORD="XXXXXXXX"; // 遠(yuǎn)程服務(wù)器密碼    private static String  DEFAULTCHART="UTF-8";       private static Connection connection = new Connection(IP);// 創(chuàng)建對(duì)象    
       /**    * 
        * login:ssh用戶登錄驗(yàn)證,使用用戶名和密碼來認(rèn)證. <br/>  
        * @author wangmeng  
        * @return  boolean    * @since JDK 1.8    */   public static boolean login(){      //創(chuàng)建遠(yuǎn)程連接,默認(rèn)連接端口為22,如果不使用默認(rèn),可以使用方法      try {         connection.connect();         //使用用戶名和密碼登錄 有秘鑰可以使用authenticateWithPublicKey驗(yàn)證         return connection.authenticateWithPassword(USR,PSWORD);      } catch (IOException e) {   
             log.error("用戶%s密碼%s登錄服務(wù)器%s失敗!",USR,PSWORD,IP,e);     }     return false;   }   
       /**     * 遠(yuǎn)程執(zhí)行shll腳本或者命令     * @param cmd     *      即將執(zhí)行的命令     * @return     *      命令執(zhí)行完后返回的結(jié)果值     */    public static String execute(String cmd){
            String result="";        try {           boolean isAuthed =login();            if(isAuthed && connection !=null){
                    Session session= connection.openSession();//打開一個(gè)會(huì)話                session.execCommand(cmd);//執(zhí)行命令                result=processStdout(session.getStdout(),DEFAULTCHART);                //如果為得到標(biāo)準(zhǔn)輸出為空,說明腳本執(zhí)行出錯(cuò)了                if(StringUtils.isBlank(result)){log.info("得到標(biāo)準(zhǔn)輸出為空,鏈接connection:"+connection+",執(zhí)行的命令:"+cmd);                    result=processStdout(session.getStderr(),DEFAULTCHART);                }else{log.info("執(zhí)行命令成功,鏈接connection:"+connection+",執(zhí)行的命令:"+cmd);                }connection.close();                session.close();            }
            } catch (IOException e) {log.error("執(zhí)行命令失敗,鏈接connection:"+connection+",執(zhí)行的命令:"+cmd+"  "+e.getMessage());            e.printStackTrace();        }return result;    }/**     * 解析腳本執(zhí)行返回的結(jié)果集     * @param in 輸入流對(duì)象     * @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("解析腳本出錯(cuò):"+e.getMessage());            e.printStackTrace();        } catch (IOException e) {log.error("解析腳本出錯(cuò):"+e.getMessage());            e.printStackTrace();        }return buffer.toString();    }
    
    }

感謝各位的閱讀,以上就是“執(zhí)行l(wèi)inux命令清理服務(wù)器緩存并返回結(jié)果怎么實(shí)現(xiàn)”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)執(zhí)行l(wèi)inux命令清理服務(wù)器緩存并返回結(jié)果怎么實(shí)現(xiàn)這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI