执行linux命令清理服务器缓存并返回结果怎么实现
发表于:2024-11-26 作者:千家信息网编辑
千家信息网最后更新 2024年11月26日,这篇文章主要讲解了"执行linux命令清理服务器缓存并返回结果怎么实现",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"执行linux命令清理服务器缓存并
千家信息网最后更新 2024年11月26日执行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安全错误
数据库的锁怎样保障安全
不属于网络安全的技术
班会记录网络安全
数据库服务器本机
网络安全设计性问题
网关与服务器建立连接失败
新乡磐石网络技术公司
用友服务器在哪儿启动
历史服务器
有没有r数据库有哪些
求生之路2 服务器ip
数据库表能随便删除吗
网络安全员培训课程列表
数据库自动生成日期怎么设置
房管所网络安全自查报告
mysql怎么删除建立的数据库
造成重大网络安全事件
网络安全指导表
idea软件用什么数据库系统
数据库类型营销
曙光服务器如何进入安全模式
arm云服务器多少钱
数据库服务器本机
数据库表格怎么拆分成2个
以网络安全为主题的英文视频
企业服务器架构图
需求分析数据库设计怎么写
本地电脑如何打开服务器网络
网络安全设备安装及品质保证
嘉兴包装防呆软件开发
网络安全执法检查制度