执行linux命令清理服务器缓存并返回结果怎么实现
发表于:2025-02-04 作者:千家信息网编辑
千家信息网最后更新 2025年02月04日,这篇文章主要讲解了"执行linux命令清理服务器缓存并返回结果怎么实现",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"执行linux命令清理服务器缓存并
千家信息网最后更新 2025年02月04日执行linux命令清理服务器缓存并返回结果怎么实现
这篇文章主要讲解了"执行linux命令清理服务器缓存并返回结果怎么实现",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"执行linux命令清理服务器缓存并返回结果怎么实现"吧!
1、准备环境 idea spingboot 2.0
org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-devtools runtime true org.apache.commons commons-lang3 3.3.2 ch.ethz.ganymed ganymed-ssh3 build210 org.projectlombok lombok true org.springframework.boot spring-boot-starter-test test org.junit.vintage junit-vintage-engine
2.创建Boot启动类
@SpringBootApplication// 开启定时任务 @EnableSchedulingpublic class SshtimedtaskApplication {public static void main(String[] args) { SpringApplication.run(SshtimedtaskApplication.class, args); }}
3、创建逻辑类
目录结构化
根据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); }}
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);// 这里批量处理 } }
ssh连接服务器
/** * ClassName:ScpSshConnectionClient
* Function: TODO ADD java操作 实现scp上传和下载文件.
* Reason: TODO ADD 服务器相关.
* Date: 2020年8月28日 上午9:55:43
* @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用户登录验证,使用用户名和密码来认证.
* @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命令清理服务器缓存并返回结果怎么实现这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
命令
服务器
服务
结果
进程
用户
脚本
缓存
密码
任务
用户名
链接
准备
学习
登录
验证
成功
内容
对象
标准
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
药剂学与网络技术哪个好
搞软件开发没意思
web服务器之间如何连接
什么是网络技术支撑
浙江万兆互联网科技有限公司
数据库连接HeidiSQL
网络安全保护案件
不属于数据库安全技术的是
php1200软件开发
周鸿伟网络安全
数据库分析如何操作
湖北电力应急软件开发品质保障
e盾网络安全
房产软件开发公司
安全关联数据库在哪里
乐视手机解绑提示服务器异常
cms服务器怎么管理
佛山服务器商
fm2012传统巨星数据库
杭州软件开发公司开早会
web下载服务器程序的原理
哪家互联网科技学校好一些
银行软件开发怎么转项目管理
服务器通过iscsi启动
数据库 导入
2017年新疆网络安全
广州在线学习app软件开发
网络技术创新的例子
网络安全技术主要包括什么内容
软件开发项目怎么操作