• weblogic自动化打补丁脚本


    转至:https://www.it610.com/article/1294086996750311424.htm

    目的

    weblogic每个季度都会有psu更新,打补丁操作也变成了每个季度都要做的事情,我们往往是通过登陆xshell等工具,一台一台的停服务打补丁启动服务。如果是单机部署的weblogic并且数量不多的话还好,通过手动登陆系统一套一套的打;那么如果是集群的环境而且集群是由多台weblogic服务器组成,手工的打补丁方式就显得十分低效,这样的话就由必要实现自动化打补丁方案了。

    环境准备

    搭建nginx服务器:存放weblogic补丁包(其他能够存放补丁包的服务器也是可以的)
    weblogic 10.3.6和weblogic 12c环境各一套(10.3.6和12c两个版本打补丁的方式不同)
    所有脚本要使用weblogic用户执行

    weblogic10.3.6自动打补丁脚本

    1. 在打10.3.6的补丁之前,需要先卸载补丁,所以得有一个卸载补丁的脚本
    #!/bin/bash
    #PUTIL是补丁工具的路径,WLSHOME1是weblogic的家目录(不知道理解的对不对)
    PUTIL=/u01/wls10/Oracle/Middleware/utils/bsu
    WLSHOME1=/u01/wls10/Oracle/Middleware/wlserver_10.3
    #将获取到的补丁jar包放入临时的文件,方便后续卸载补丁使用
    cd ${PUTIL} && ./bsu.sh -prod_dir=${WLSHOME1} -status=applied -verbose -view | grep jar > tmp_jar
    #打过weblogic10.3.6psu的人会发现有时候,上一个psu可能会是由两个jar包组成,比如a.jar和b.jar
    #这两个补丁的卸载需要有一定的顺序,如果先打了a.jar然后打了b.jar,那卸载的顺序就是先卸载b.jar,再卸载a.jar
    #如果卸载顺序出错,就会出现卸载补丁冲突的报错
    #将查询到的tmp_jar文件通过tac命令逆序取出,为了实现上述所说的多个补丁的情况
    jar_names=($(tac tmp_jar | awk '{print $NF}' | awk -F '.' '{print $(NF-1)}'))
    for jar_name in ${jar_names[@]}; do
            echo "remove ${jar_name}"
            cd ${PUTIL}/cache_dir && ./bsu.sh -remove -patchlist=${jar_name} -prod_dir=${WLSHOME1}
    done
    
    1. 打补丁脚本
    #!/bin/bash
    PUTIL=/u01/wls10/Oracle/Middleware/utils/bsu
    WLSHOME1=/u01/wls10/Oracle/Middleware/wlserver_10.3
    #创建文件夹存放补丁包
    #判断存放补丁包的文件夹是否存在:
    if [ -d ${PUTIL}/cache_dir ];then
    	echo "exsits"
    else
    	mkdir -p ${PUTIL}/cache_dir
    	chown -R weblogic:weblogic ${PUTIL}/cache_dir
    	chmod -R 775 ${PUTIL}/cache_dir
    fi
    
    #获取补丁包
    which wget 2>&1 >/dev/null
    if [[ $? -eq 0  ]];then 
        echo esixt; 
    else 
        yum install wget -y
    fi
    which unzip 2>&1 >/dev/null
    if [[ $? -eq 0  ]];then 
        echo esixt; 
    else 
        yum install unzip -y
    fi
    #PKG_PATCH是补丁包名称
    cd ${PUTIL}/cache_dir && wget ftp://10.10.10.10/tmp/${PKG_PATCH}
    #解压补丁包
    cd ${PUTIL}/cache_dir && unzip *.zip
    chown weblogic:weblogic -R ${PUTIL}/cache_dir
    chmod 775 -R ${PUTIL}/cache_dir
    #更改bsu.sh脚本中的内存参数,目的是提高打补丁的速度
    if [ -f ${PUTIL}/bsu.sh.bak ];then
    echo "exsits"
    else
    cp ${PUTIL}/bsu.sh ${PUTIL}/bsu.sh.bak
    cd ${PUTIL} && sed -i '5c MEM_ARGS="-Xms2048m -Xmx4096m -XX:-UseGCOverheadLimit"' ./bsu.sh
    fi
    #停服务,这一步比较暴力,可以通过weblogic提供的脚本来停止,有时候会遇到停不掉的情况发生,所以直接kill进程,生产环境需要考虑下这一步操作
    ps -ef | grep java| grep weblogic | grep -v "grep" 2>&1 >/dev/null
    if [[ $? -eq 0 ]];then
        ps -ef |grep java| grep weblogic | grep -v "grep"|awk '{print $2}'|xargs kill -9
        else
        echo "no exsits"
    fi
    #打补丁:
    cd ${WLSHOME1}/server/bin && source setWLSEnv.sh
    cd ${PUTIL}/cache_dir && PK=$(ls -lt *.jar | head -n 1 | awk '{print $NF}' | awk -F "." '{print $1}')
    cd ${PUTIL} && ./bsu.sh -install -patch_download_dir=${PUTIL}/cache_dir -patchlist=${PK} -prod_dir=${WLSHOME1}
    #启动weblogic服务
    nohup sh /home/weblogic/Oracle/Middleware/user_projects/domains/base_domain/bin/startWebLogic.sh &
    

    weblogic12c自动打补丁脚本

    1. 打补丁脚本
    #!/bin/bash
    #创建文件夹存放补丁包
    #判断存放补丁包的文件夹是否存在:
    if [[ -d /tmp/wlspatch ]];then
    echo "exsits"
    else
    mkdir -p /tmp/wlspatch
    chown -R weblogic:weblogic /tmp/wlspatch
    chmod -R 775 /tmp/wlspatch
    fi
    #获取补丁包
    which wget 2>&1 >/dev/null
    if [[ $? -eq 0  ]];then 
       echo esixt; 
    else 
       yum install wget -y
    fi
    
    which unzip 2>&1 >/dev/null
    if [[ $? -eq 0  ]];then 
       echo esixt; 
    else 
       yum install unzip -y
    fi
    cd /tmp/wlspatch && wget ftp://10.10.10.10/tmp/${PKG_PATCH}
    #解压
    unzip /tmp/wlspatch/*.zip -d /tmp/wlspatch
    chown -R weblogic:weblogic /tmp/wlspatch
    chmod -R 775 /tmp/wlspatch
    #停止weblogic服务
    #调用停止weblogic服务的脚本
    #打补丁
    PKG_NAME=$(cd /tmp/wlspatch && ls | grep -Ev '*.zip') 
    cd /tmp/wlspatch/${PKG_NAME} && ${PUTIL}/opatch apply -silent
    
    #删除/tmp/wlspatch
    mv /tmp/wlspatch  /tmp/wlspatch_$(date +%s)
    #开启weblogic服务
    cd /home/weblogic && ./restart.sh
    
    1. 参考上述脚本,可以再写一个卸载weblogic12c补丁的脚本
  • 相关阅读:
    Rsync常见运维操作命令
    [图文详解] Sublime Text在Windows/Ubuntu/Mac OSX中配置使用CTags
    Sublime Text : 创建工程
    Sublime Text 插件 & 使用技巧
    如何解决adb devices 端口被占用的问题zz
    Nginx 服务器安装及配置文件详解
    把notepad++设置为系统全局文本默认打开应用
    Ubuntu 下载 & 编译 Android5.1 源码
    同步、更新、下载Android Source & SDK from 国内镜像站
    如何为Linux生成和打上patch
  • 原文地址:https://www.cnblogs.com/my-first-blog-lgz/p/13935922.html
Copyright © 2020-2023  润新知