• 通过shell批量更新多台linux上jar包


    背景

    内网集群jar包需要批量更新

    将集群每台机器逐一覆盖重启耗费大量精力

    内网不能使用yum或者apt-get等工具,安装比如jenkins等工具估计会很麻烦
    上次装个nginx,死活就装上了一半,没有把https相关组件装全,依赖越装越多

    准备工作

    参见其他博主的文章https://blog.csdn.net/u010606397/article/details/111251175

    结合经验简单总结一下:

    • 在集群的每个节点上执行命令ssh-keygen,然后一路按回车键即可
    • 选出一台用于主导更新的机器,使用ssh-copy-id root@服务端IP命令,在这台机器上登录所有其他机器。

    这是为了脚本能调用另一台linux命令而做的准备

    然后需要配置一台静态资源服务器,可以使用java-web容器,或者nginx。我这里使用了nginx。

    大致架构

    组织架构

    说明:红色框选出来的内容是每台机器上需要预置的

    1. 手动更新静态资源的jar包,例如我只需要把nginx静态代理的目录下jar包覆盖即可
    2. 运行主导机上统一更新脚本
    3. 统一更新脚本调用每台机器的更新本机脚本
    4. 更新本机脚本从静态资源服务器(nginx)下载jar包到指定位置,并重启java服务

    然后贴出我的两个shell脚本供参考

    更新本机脚本 update_jar.sh

    #显示一下执行命令的是哪台机器
    echo 我是61机
    
    #cd命令就不解释了
    cd /opt/pzj
    
    #从静态资源服务器(nginx)下载jar包到指定路径
    wget http://??.???.??.61/update_jar/nb.jar -O /usr/local/nb.jar
    
    #下载完成后,杀掉原来的进程
    kill -9 `ps -ef | grep nb.jar | grep -v grep | awk '{print $2}'`
    
    #进程杀死后删除原来的jar包
    rm -f /opt/pzj/nb.jar
    
    #将新jar包复制到原来jar包所在位置
    cp /usr/local/nb.jar /opt/pzj/nb.jar
    
    #运行新的jar包
    nohup java -jar /opt/pzj/nb.jar --spring.profiles.active=prd &
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    统一更新脚本 all_update.sh

    #统一更新脚本和nginx都在集群第一台服务器上,这句调用了自己的《更新本机》脚本
    nohup sh /usr/local/pzj/update_jar.sh >> run61.out &
    
    #通过配置好的ssh免密登录,调用集群其他服务器的《更新本机》脚本
    nohup ssh root@??.???.??.62 sh /usr/local/pzj/update_jar.sh >> run62.out &
    nohup ssh root@??.???.??.63 sh /usr/local/pzj/update_jar.sh >> run63.out &
    
    ###还有多少机器都可以追加在这下面
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    注意

    • 不要让nginx的静态资源直接指向本机运行的jar包,又调用本机一键更新脚本,会导致闭环下载的错误 (这句有点绕口,不脑抽的可以忽略)
    • 在《更新本机》脚本中,我选择先下载jar包到其他位置,然后杀掉进程,覆盖jar包,再启动。你也可以偷懒,直接覆盖原来的jar包,然后重启进程。
  • 相关阅读:
    Go 与数据可视化:使用 Gonum 和 Plot 库探索数据之美
    Tomcat的Host容器
    Flume笔记
    C# 中的守卫语句(GuardClause)
    腾讯空降测试工程师,绩效次次拿S,真是砂纸擦屁股,给我露了一手啊
    【数据挖掘】2022数据挖掘之数据的高级处理(消除缺失值、数据离散化、合并等)
    【使用matplotlib】使用统计函数绘制简单图形
    【300+精选大厂面试题持续分享】大数据运维尖刀面试题专栏(六)
    `Promise`全面解析
    通过 Canal 将 MySQL 数据实时同步到 Easysearch
  • 原文地址:https://blog.csdn.net/weixin_43074462/article/details/124970354