Bootstrap

JRT多服务器同步程序

之前的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不也是人写的。

;