赞
踩
之前的JRT只部署在一个服务器,实际运用可能会有数台、数十台、或者更多服务器。那么多台服务器就需要程序同步机制。这里借助Rsync同步,但是有个问题是Rsync同步jar之后他不知道是否需要重启站点,为此实现java控制台驱动Rsync,重定向Rsync的输出到java,通过自己程序决定是否需要重启站点。
本次优化运维便捷性
实现代码
/* 本框架版权归属于JRT计划,任何单位或个人未经许可,不得以任何方式复制、传播、展示、发布、分发、重新分发、修改、反编译、 反向编译或以其他方式使用本框架的任何部分,包括但不限于源代码、二进制文件、文档、演示文稿、示例代码和API。 使用本框架的用户需遵守以下条款: 用户只能以个人学习和研究为目的使用本框架,不得将其用于商业用途。 用户在使用本框架时,应遵守所有适用的法律和法规,包括但不限于版权法、商标法、专利法和隐私权法。 用户在使用本框架时,应自行承担风险和责任,并确保不会侵犯任何知识产权或个人权利。 本框架的使用仅限于用户自己使用,不得将其分发给其他用户或将其用于任何形式的共享或传播。 在使用本框架时,用户应尊重和保护其他用户的隐私和个人信息,不得将其泄露给任何第三方。 违反以上条款将视为侵权行为,将采取法律手段维护JRT合法权益。 */ import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.StandardOpenOption; import java.util.concurrent.TimeUnit; /** * 实现同步网站代码,根据同步结果角色是否需要重启web */ public class Rsync { /** * 实体编译入口 * * @param args */ public static void main(String[] args) { // 检查是否为Windows平台,如果是则提示不支持并退出 if (System.getProperty("os.name").toLowerCase().contains("win")) { System.out.println("不支持Windows,按任意键退出"); try { System.in.read(); } catch (IOException e) { e.printStackTrace(); } return; } //得到.class所在的路径rsync String basePath = Rsync.class.getResource("").getPath(); File fBase = new File(basePath); //tomcat的根 basePath = fBase.getParent(); //同步脚本的路径 String shPath = Paths.get(basePath, "rsync", "rsyncclient.sh").toString(); ProcessBuilder processBuilder = new ProcessBuilder("/usr/bin/bash", shPath); //将标准错误和标准输出合并 processBuilder.redirectErrorStream(true); Process process = null; try { process = processBuilder.start(); BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line; boolean needRestart = false; //循环读取数据 while ((line = reader.readLine()) != null) { System.out.println(line); //检查是否需要重启 if ((line.contains("lib") && (line.contains(".jar")) || line.contains("/Conf/restart.flag"))) { needRestart = true; } else if (line.contains("webapps/") && line.contains(".java")) { String path = basePath + "/" + line; Path filePath = Paths.get(path); if (Files.exists(filePath)) { System.out.println("追加一个空格触发编译"); //要追加的空格 String space = " "; Files.write(filePath, space.getBytes(StandardCharsets.UTF_8), StandardOpenOption.APPEND); } } } int exitCode = process.waitFor(); System.out.println("Shell script exited with code " + exitCode); //需要重启网站 if (needRestart) { System.out.println("有需要重启站点才生效的文件更新,30秒后重启站点"); //休眠30秒 TimeUnit.SECONDS.sleep(30); //重启脚本 String stopweb = Paths.get(basePath, "bin", "shutdown.sh").toString(); String startweb = Paths.get(basePath, "bin", "startup.sh").toString(); //重启网站 ProcessBuilder processBuilderWeb = new ProcessBuilder("/usr/bin/bash", stopweb); Process processWeb = processBuilderWeb.start(); processWeb.waitFor(); ProcessBuilder processBuilderWebStart = new ProcessBuilder("/usr/bin/bash", startweb); Process processWebStart = processBuilderWebStart.start(); processWebStart.waitFor(); } } catch (IOException | InterruptedException e) { e.printStackTrace(); } finally { //进程没结束就杀进程 if (process != null && !process.isAlive()) { process.destroy(); } } } }
排除文件指定这些目录排除同步
同步模块配置
供Java驱动的客户端同步脚本
jrt初始化文件同步服务菜单
jrt执行客户端同步的菜单,这样用jrt 6就能主动执行同步了,systemd的服务会定时5分钟执行一次同步
Linux同步效果
root@VM-8-9-ubuntu:~# jrt 欢迎使用jrt的linux命令呼出入口,通过jrt命令引导bash脚本 执行命令:bash /jrtlis/jrt.sh +欢迎您使用jrt网站运维脚本 +该脚本致力于简化基于jrt框架的web在linux上运维 +常用菜单选项有1、2 +检验约定发布在8080端口 +在没有jrt命令的检验服务器运行bash /jrtlis/jrt.sh来第一次初始化jrt命令 +*************************************************JRTWeb网站配置工具************************************************************+ + + + 1:重启Tomcat网站 + + + + 2:端口查看和开放,查看端口占用(lsof -i:8080) + + + + 3:查看网站进程信息 + + + + 6:同步主站点程序 + + + + 8:编译实体 + + + + 9:常用命令帮助 + + + + 11:停止Tomcat网站 + + + + 18:实体编译测试和代码比对 + + + + 66:自定义命令名称,否则都是以jrt驱动 + + + + 97:测试端口可用性 + + + + 98:启动rsync服务 + + + + 99:初始化同步程序 + + + + 发布后系统访问地址https://127.0.0.1:8081/jrtlis/login/form/Login.html + + 小乌鱼 20231228 + +*******************************************************************************************************************************+ 请按菜单输入选择功能Ctrl+C退出:6 执行客户端同步任务 receiving incremental file list webapps/jrtlis/Conf/Security.conf 0 0% 0.00kB/s 0:00:00 22 100% 21.48kB/s 0:00:00 (xfr#1, ir-chk=1003/1515) webapps/jrtlis/error/error.html 0 0% 0.00kB/s 0:00:00 1,014 100% 11.13kB/s 0:00:00 (xfr#2, ir-chk=1006/7674) sent 1,887 bytes received 335,805 bytes 225,128.00 bytes/sec total size is 1,395,700,883 speedup is 4,133.06 Shell script exited with code 0 同步完成 +*************************************************JRTWeb网站配置工具************************************************************+ + + + 1:重启Tomcat网站 + + + + 2:端口查看和开放,查看端口占用(lsof -i:8080) + + + + 3:查看网站进程信息 + + + + 6:同步主站点程序 + + + + 8:编译实体 + + + + 9:常用命令帮助 + + + + 11:停止Tomcat网站 + + + + 18:实体编译测试和代码比对 + + + + 66:自定义命令名称,否则都是以jrt驱动 + + + + 97:测试端口可用性 + + + + 98:启动rsync服务 + + + + 99:初始化同步程序 + + + + 发布后系统访问地址https://127.0.0.1:8081/jrtlis/login/form/Login.html + + 小乌鱼 20231228 + +*******************************************************************************************************************************+ 请按菜单输入选择功能Ctrl+C退出: +*************************************************JRTWeb网站配置工具************************************************************+ + + + 1:重启Tomcat网站 + + + + 2:端口查看和开放,查看端口占用(lsof -i:8080) + + + + 3:查看网站进程信息 + + + + 6:同步主站点程序 + + + + 8:编译实体 + + + + 9:常用命令帮助 + + + + 11:停止Tomcat网站 + + + + 18:实体编译测试和代码比对 + + + + 66:自定义命令名称,否则都是以jrt驱动 + + + + 97:测试端口可用性 + + + + 98:启动rsync服务 + + + + 99:初始化同步程序 + + + + 发布后系统访问地址https://127.0.0.1:8081/jrtlis/login/form/Login.html + + 小乌鱼 20231228 + +*******************************************************************************************************************************+ 请按菜单输入选择功能Ctrl+C退出: +*************************************************JRTWeb网站配置工具************************************************************+ + + + 1:重启Tomcat网站 + + + + 2:端口查看和开放,查看端口占用(lsof -i:8080) + + + + 3:查看网站进程信息 + + + + 6:同步主站点程序 + + + + 8:编译实体 + + + + 9:常用命令帮助 + + + + 11:停止Tomcat网站 + + + + 18:实体编译测试和代码比对 + + + + 66:自定义命令名称,否则都是以jrt驱动 + + + + 97:测试端口可用性 + + + + 98:启动rsync服务 + + + + 99:初始化同步程序 + + + + 发布后系统访问地址https://127.0.0.1:8081/jrtlis/login/form/Login.html + + 小乌鱼 20231228 + +*******************************************************************************************************************************+ 请按菜单输入选择功能Ctrl+C退出: +*************************************************JRTWeb网站配置工具************************************************************+ + + + 1:重启Tomcat网站 + + + + 2:端口查看和开放,查看端口占用(lsof -i:8080) + + + + 3:查看网站进程信息 + + + + 6:同步主站点程序 + + + + 8:编译实体 + + + + 9:常用命令帮助 + + + + 11:停止Tomcat网站 + + + + 18:实体编译测试和代码比对 + + + + 66:自定义命令名称,否则都是以jrt驱动 + + + + 97:测试端口可用性 + + + + 98:启动rsync服务 + + + + 99:初始化同步程序 + + + + 发布后系统访问地址https://127.0.0.1:8081/jrtlis/login/form/Login.html + + 小乌鱼 20231228 + +*******************************************************************************************************************************+ 请按菜单输入选择功能Ctrl+C退出: +*************************************************JRTWeb网站配置工具************************************************************+ + + + 1:重启Tomcat网站 + + + + 2:端口查看和开放,查看端口占用(lsof -i:8080) + + + + 3:查看网站进程信息 + + + + 6:同步主站点程序 + + + + 8:编译实体 + + + + 9:常用命令帮助 + + + + 11:停止Tomcat网站 + + + + 18:实体编译测试和代码比对 + + + + 66:自定义命令名称,否则都是以jrt驱动 + + + + 97:测试端口可用性 + + + + 98:启动rsync服务 + + + + 99:初始化同步程序 + + + + 发布后系统访问地址https://127.0.0.1:8081/jrtlis/login/form/Login.html + + 小乌鱼 20231228 + +*******************************************************************************************************************************+ 请按菜单输入选择功能Ctrl+C退出: +*************************************************JRTWeb网站配置工具************************************************************+ + + + 1:重启Tomcat网站 + + + + 2:端口查看和开放,查看端口占用(lsof -i:8080) + + + + 3:查看网站进程信息 + + + + 6:同步主站点程序 + + + + 8:编译实体 + + + + 9:常用命令帮助 + + + + 11:停止Tomcat网站 + + + + 18:实体编译测试和代码比对 + + + + 66:自定义命令名称,否则都是以jrt驱动 + + + + 97:测试端口可用性 + + + + 98:启动rsync服务 + + + + 99:初始化同步程序 + + + + 发布后系统访问地址https://127.0.0.1:8081/jrtlis/login/form/Login.html + + 小乌鱼 20231228 + +*******************************************************************************************************************************+ 请按菜单输入选择功能Ctrl+C退出: +*************************************************JRTWeb网站配置工具************************************************************+ + + + 1:重启Tomcat网站 + + + + 2:端口查看和开放,查看端口占用(lsof -i:8080) + + + + 3:查看网站进程信息 + + + + 6:同步主站点程序 + + + + 8:编译实体 + + + + 9:常用命令帮助 + + + + 11:停止Tomcat网站 + + + + 18:实体编译测试和代码比对 + + + + 66:自定义命令名称,否则都是以jrt驱动 + + + + 97:测试端口可用性 + + + + 98:启动rsync服务 + + + + 99:初始化同步程序 + + + + 发布后系统访问地址https://127.0.0.1:8081/jrtlis/login/form/Login.html + + 小乌鱼 20231228 + +*******************************************************************************************************************************+ 请按菜单输入选择功能Ctrl+C退出:6 执行客户端同步任务 receiving incremental file list webapps/jrtlis/error/ webapps/jrtlis/error/error403.html 0 0% 0.00kB/s 0:00:00 1,235 100% 1.18MB/s 0:00:00 (xfr#1, ir-chk=1005/7674) sent 1,863 bytes received 335,768 bytes 675,262.00 bytes/sec total size is 1,395,700,883 speedup is 4,133.81 Shell script exited with code 0 同步完成 +*************************************************JRTWeb网站配置工具************************************************************+ + + + 1:重启Tomcat网站 + + + + 2:端口查看和开放,查看端口占用(lsof -i:8080) + + + + 3:查看网站进程信息 + + + + 6:同步主站点程序 + + + + 8:编译实体 + + + + 9:常用命令帮助 + + + + 11:停止Tomcat网站 + + + + 18:实体编译测试和代码比对 + + + + 66:自定义命令名称,否则都是以jrt驱动 + + + + 97:测试端口可用性 + + + + 98:启动rsync服务 + + + + 99:初始化同步程序 + + + + 发布后系统访问地址https://127.0.0.1:8081/jrtlis/login/form/Login.html + + 小乌鱼 20231228 + +*******************************************************************************************************************************+ 请按菜单输入选择功能Ctrl+C退出:6 执行客户端同步任务 receiving incremental file list webapps/jrtlis/sys/ashx/ashDevOpenPage.java 追加一个空格触发编译 0 0% 0.00kB/s 0:00:00 6,956 100% 6.63MB/s 0:00:00 (xfr#1, to-chk=49/11523) sent 1,916 bytes received 335,839 bytes 225,170.00 bytes/sec total size is 1,395,700,884 speedup is 4,132.29 Shell script exited with code 0 同步完成 +*************************************************JRTWeb网站配置工具************************************************************+ + + + 1:重启Tomcat网站 + + + + 2:端口查看和开放,查看端口占用(lsof -i:8080) + + + + 3:查看网站进程信息 + + + + 6:同步主站点程序 + + + + 8:编译实体 + + + + 9:常用命令帮助 + + + + 11:停止Tomcat网站 + + + + 18:实体编译测试和代码比对 + + + + 66:自定义命令名称,否则都是以jrt驱动 + + + + 97:测试端口可用性 + + + + 98:启动rsync服务 + + + + 99:初始化同步程序 + + + + 发布后系统访问地址https://127.0.0.1:8081/jrtlis/login/form/Login.html + + 小乌鱼 20231228 + +*******************************************************************************************************************************+ 请按菜单输入选择功能Ctrl+C退出:6 执行客户端同步任务 receiving incremental file list webapps/jrtlis/Conf/restart.flag 0 0% 0.00kB/s 0:00:00 10 100% 9.77kB/s 0:00:00 (xfr#1, ir-chk=1001/1515) webapps/jrtlis/sys/ashx/ashDevOpenPage.java 追加一个空格触发编译 0 0% 0.00kB/s 0:00:00 6,956 100% 11.75kB/s 0:00:00 (xfr#2, to-chk=49/11523) sent 1,995 bytes received 335,633 bytes 675,256.00 bytes/sec total size is 1,395,700,884 speedup is 4,133.84 Shell script exited with code 0 有需要重启站点才生效的文件更新,30秒后重启站点 同步完成 +*************************************************JRTWeb网站配置工具************************************************************+ + + + 1:重启Tomcat网站 + + + + 2:端口查看和开放,查看端口占用(lsof -i:8080) + + + + 3:查看网站进程信息 + + + + 6:同步主站点程序 + + + + 8:编译实体 + + + + 9:常用命令帮助 + + + + 11:停止Tomcat网站 + + + + 18:实体编译测试和代码比对 + + + + 66:自定义命令名称,否则都是以jrt驱动 + + + + 97:测试端口可用性 + + + + 98:启动rsync服务 + + + + 99:初始化同步程序 + + + + 发布后系统访问地址https://127.0.0.1:8081/jrtlis/login/form/Login.html + + 小乌鱼 20231228 + +*******************************************************************************************************************************+ 请按菜单输入选择功能Ctrl+C退出:
这样JRT成为集成开发、部署、运维一体的信创框架,从整个软件的生命周期中降低软件公司的成本和提升竞争力。在JRT下、不需要像互联网那么细分岗位,人人都可以干全栈工程师,只需要前端和java基础知识就可以几分钟内上手开发,只需要Linux的shell连接基础知识就可以上手运维。框架沉淀来自上十年的一线开发和框架设计经验、和上十年的从0手写C#的ORM和使用经验。很多人和公司觉得自己写框架和数据访问层不可靠、没Spring现成的来的可靠;从IIS到DotNetCore的业务脚本化和Linux然后直接上线大医院我不是一波就稳定了吗。没什么不可控的,只要吃懂ado或JDBC和基础知识就行了。老外的Spring不也是人写的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。