您好,登錄后才能下訂單哦!
這篇文章主要講解了“執(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)化
根據(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); } }
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);// 這里批量處理 } }
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)注!
免責(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)容。