linux下批量更新升级多个系统文件

工作中需要部署上千套相同系统,为方便系统更新升级,除常规的系统内置升级程序外,必要的时候还需要手动批量覆盖(如系统存在严重bug时),shell脚本代码如下:

注:

  1. 支持排除指定目录升级(原则上建议将定制系统放于不同目录);
  2. 系统内置升级程序方便查看各系统使用情况(当前为登录系统后即可与中心服务器检测版本,如存在新版本则自动拉取升级);
  3. 如使用系统内置升级模式,则有重大bug时使用shell更新可能因各系统版本不一致导致系统异常;
  4. 建议仅使用一种升级模式;
#!/bin/bash

#---------------------------------------
# 批量更新多文件夹内容 支持排除指定目录
# 注:多系统升级时,为避免文件冲突,建议
# 单次单压缩包更新
# author: SenSen 1050575278
# date: 2021/09/10
#---------------------------------------

#添加定时任务 10min
# */10 * * * * /www/upgrade/upgrade.sh

#记录日志
log="/www/upgrade/upgrade.log"

#获取当前时间
curtime=`date +"%Y/%m/%d %H:%M:%S"`

#进入升级包所在目录 升级包必须包含version.txt文件
cd /www/upgrade/fix

#判断目录中是否有文件 原则上一次只能存在一个文件,避免多个升级包导致混乱
count=`ls -l|grep '^-'|wc -l`

#获取所有系统 废弃
# source ./wlt_dir.sh

#所在目录
dir='/diskb/www/'

#自动获取系统目录文件 仅可包含oa系统文件
sysDir=`ls /diskb/www`

#排除目录
excluded=()

#测试示例
#sysDir=('wlt_3163')

if [ $count -ne 0 ];then
    for i in `ls`
        do
            for f in ${sysDir}
                do
                    #排除指定目录
                    if [[ ${excluded[@]/${f}/} != ${excluded[@]} ]]; then
                        continue
                    fi
                    echo "系统:${f} 升级文件:${i}">>${log}
                    #解压到对应系统目录
                    unzip -oq /www/upgrade/fix/${i} -d ${dir}${f}
                    echo "${curtime} ${i} done">>${log}
                done
        #移动升级包
        mv /www/upgrade/fix/${i} /www/upgrade/bak;
        done
    echo "upgrade successfully">>$log
else
    #echo "${curtime} upgrade_fix is empty">>$log
fi

Tags: shell

添加新评论