這篇文章主要講解了“執(zhí)行l(wèi)inux命令清理服務(wù)器緩存并返回結(jié)果怎么實(shí)現(xiàn)”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“執(zhí)行l(wèi)inux命令清理服務(wù)器緩存并返回結(jié)果怎么實(shí)現(xiàn)”吧!
10年積累的成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶(hù)對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶(hù)得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有石峰免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
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)類(lèi)
@SpringBootApplication // 開(kāi)啟定時(shí)任務(wù) @EnableSchedulingpublic class SshtimedtaskApplication {public static void main(String[] args) { SpringApplication.run(SshtimedtaskApplication.class, args); } }
3、創(chuàng)建邏輯類(lèi)
目錄結(jié)構(gòu)化
根據(jù)spring ioc將定時(shí)任務(wù)注入容器,啟動(dòng)即開(kāi)啟
@Component@Slf4jpublic class TimedTaskConfig { @Resource TimedTaskService timedTaskService; //“0 15 10 ? * *” 測(cè)試 每天上午10:15觸發(fā)成功 @Scheduled(cron="0 0 23 * * ?") //每晚凌晨 23點(diǎn)觸發(fā) public void clearLinuxProcess(){ log.info("獲取遠(yuǎn)程服務(wù)器進(jìn)程號(hào)開(kāi)始:"+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ù) 邏輯類(lèi)
@Slf4j@Servicepublic class TimedTaskService { // ps -ef | grep xxx.log | grep -v grep | awk '{print $2}' 查詢(xún)服務(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);// 查詢(xún)返回的進(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ù)器用戶(hù)名 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用戶(hù)登錄驗(yàn)證,使用用戶(hù)名和密碼來(lái)認(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(); //使用用戶(hù)名和密碼登錄 有秘鑰可以使用authenticateWithPublicKey驗(yàn)證 return connection.authenticateWithPassword(USR,PSWORD); } catch (IOException e) { log.error("用戶(hù)%s密碼%s登錄服務(wù)器%s失?。?quot;,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();//打開(kāi)一個(gè)會(huì)話(huà) session.execCommand(cmd);//執(zhí)行命令 result=processStdout(session.getStdout(),DEFAULTCHART); //如果為得到標(biāo)準(zhǔn)輸出為空,說(shuō)明腳本執(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)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)執(zhí)行l(wèi)inux命令清理服務(wù)器緩存并返回結(jié)果怎么實(shí)現(xiàn)這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
新聞標(biāo)題:執(zhí)行l(wèi)inux命令清理服務(wù)器緩存并返回結(jié)果怎么實(shí)現(xiàn)
轉(zhuǎn)載源于:http://chinadenli.net/article2/gpcdic.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供、品牌網(wǎng)站設(shè)計(jì)、App設(shè)計(jì)、網(wǎng)站排名、微信小程序、網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容