工作所用的模块回滚脚本

俗话说的好:“真男人从来不回滚”,但是家中常备一个回滚脚本也是很有必要的,我所在公司的服务器模块名都是在初始化的时候写进/etc/role_install这个文件里,如下图的这个服务器就是fss服务器:

wKioL1lcicDTHuIEAAAc35tj_Kw536.png


再比如下面这个服务器,虽然包含nginx的组件但是httpproxy的服务器:

wKiom1lcijzy4_9MAAAloN3Ijck735.png


那么有了这样的前提,整个回滚的脚本内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#!/bin/bash
#Written by ChrisChan @July-4th-2017
#Desription:这是一个回滚的脚本。
module=$(cat /etc/role_install |grep -v zkclient|grep -v nginx)
echo -e '\033[31m现在将执行回滚操作,本次回滚只回滚普通模块,不包含nginx和zkclient!\033[0m' 
echo "回滚的模块名称:"$module
echo -e '\033[33m如果想取消回滚操作,请ctrl+c立即停止本脚本...\033[0m'
sleep 5
cd /dxpbackup/hswx/$module && zip $module.zip -x "*og*" -r .    #到备份的文件夹里去压缩
mv /dxpbackup/hswx/$module/$module.zip /mnt/hswx    
echo $module".zip文件已经生成!"
until "$decision" == "Y" -o "$decision" == "y" -o "$decision" == "N" -o "$decision" == "n" ]
do
        read -p "请问是否用回滚的压缩包覆盖到/mnt/hswx下?(y/n)" decision
        echo "您的选择是:"$decision
        if [ $decision == Y -o $decision == y ]
                then
                        echo "现在已经开始覆盖..."
                        rm -rf /mnt/hswx/$module    #先把原来的内容删除
                        unzip /mnt/hswx/$module.zip -d /mnt/hswx/$module    #重新解压缩进去
                        echo -e '\033[32m覆盖已经完成,可以直接执行/startall脚本!\033[0m'
        elif [ $decision == N -o $decision == n ]
                then
                        echo -e '\033[32m生成的'$module'.zip文件保存在/root文件夹里\033[0m'
        else
                echo -e '\033[31m输入字符不符合!请重新输入!\033[0m'
        fi
done


新的知识点!

1)zip在压缩文件夹的时候要过滤掉某些文件使用“-x”参数,比如说要在AAA文件夹里面过滤掉abc和jqk这两个文件,那么语句就是#zip AAA.zip -x "abc" -x "jqk" -r . 或者是 #zip -r -x=abc -x=jqk AAA.zip . 这样两个语句。


如果你要过滤掉的是一个文件夹,比如那么就要在文件夹后面名字加上一个*,下图就是要压缩整个auc文件夹为456.zip但是又不想要lib这个文件夹,就使用了#zip 456.zip -x "lib*" -r .

wKiom1lck3ny7e5DAAFedrqgs0I255.png

不过如果文件夹里还有其他lib开头的文件夹也会被过滤掉,这一点要注意。


2)本shell里面涉及了逻辑判断,而[[ 和 [ 的区别如下图:

wKiom1lcmF3hhIlVAAAqj1jTU9U969.gif


3)如果if语句中出现报错“[: too many arguments”,很有可能就是字符串变量中可能存在空格,shell解析时将其认为是多个参数,再进行判断时,无法知道该获取哪个值,所以最好都用双引号括起来; 


4)如果是“变量a等于aa且变量b等于bb  或者 变量c等于cc且变量d等于dd ” 这样的判断句怎么写?答曰:

[ $a = "aa" -a $b = "bb" ] || [$c = "cc" -a $d = "dd" ]


参考资料:https://zhangge.net/4776.html



最后的最后,如果您觉得本文对您升职加薪迎娶白富美有帮助,那么请不吝赞助之手,刷一下下面的二维码,赞助本人继续写更多优秀的博文!

wKioL1l16m3BMYDKAACPHEqd55Q687.jpg


 本文转自 苏幕遮618 51CTO博客,原文链接:http://blog.51cto.com/chenx1242/1944756



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/540266.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Quartus II 8.1 详解--有图---图片详解 【1讲】

Quartus II 8.1 详解--有图---图片详解 看图片比较清楚,比文章清楚的多 本文转自 zhangguangyi 51CTO博客,原文链接http://blog.51cto.com/bosszhang/808019:

shell下的进度条和最大最小平均值

进度条 C语言下的进度条参考我原来的一篇blog->进度条 1234567891011121314151617181920212223function proc() {i0 str arr(| / - \\) index0 while [ $i -le 100 ] do printf "[%-101s][%d%%][%c]\r" "$str" "$i" "${arr[$index]}&qu…

Linux系统管理初步(七)系统服务管理、chkconfig与systemd 编辑中

Linux系统本身包含了很多服务,CentOS6之前系统的服务用SysV控制,CentOS7改为systemd控制 一、chkconfig服务管理机制 简而言之,chkconfig就是CentOS6以前用来控制系统服务的工具, 常用方法举例 chkconfig --list #列出所有的系统服…

窗体间传递数据

前言 做项目的时候,winfrom因为没有B/S的缓存机制,窗体间传递数据没有B/S页面传递数据那么方便,今天我们就说下winfrom中窗体传值的几种方式。 共有字段传递 共有字段传递实现起来很方便,就是在窗体类中加个共有字段属性&#xff…

微信抢房软件开发

2019独角兽企业重金招聘Python工程师标准>>> 这两年楼市真可谓是一个"火“字难以形容 经历了长沙两次开盘,都没有抢到,目前还没有买到房子,说说我的悲剧吧,让大伙都开心开心 第一次抢房是今年4月份长沙万科金域国…

11.13 模10计数器设计

.新建一个工程 Family:FLEX10K Available device:EPF10K20TC144-3 2.设置lpm_counter宏单元参数并连接引脚 连接引脚的时候要注意的是,向量线的连接。 3.时序仿真 检查无误后进行下一步 4.载入7448并进行引脚连接 5.分配管脚 再次编译&#x…

使用valueOf前必须进行校验

每个枚举都是java.lang.Enum的子类,都可以访问Enum类提供的方法,比如hashCode(),name(),valueOf()等..... 其中valueOf()方法会把一个String类型的名称转变为枚举项,也就是枚举项中查找出字面值与该参数相等的枚举项,虽然这个方法很简单,但是JDK却做了一个对于开发人员来说并不…

多IDC GSLB的部署

之前已经介绍过GSLB的实现原理,这里再向大家讲述一下GSLB经常遇到的部署方式,多IDC的部署。很多大型的企业或业务容灾要求非常高的客户都会部署有多个异地的数据中心,以保证其业务的“全天候”不间断的正常运行,而要整合多个IDC的…

信息系统开发平台OpenExpressApp:【OpenTest】 之 语法及其使用介绍

在OpenTest 之 运行环境准备中介绍了运行自动化测试需要做的一些准备工作,本篇将继续给大家介绍OpenTest的脚本语法以及使用方法,通过学习后读者应该能够开始动手编写UI自动化测试脚本了。 关键字驱动测试 在学习语法之前,需要了解一下关键字…

Oracle 10g 高级安装图文教程(二)

第八步:为了简便起见(工作中肯定不安全),选择“所有的帐户都是用同一个口令”,并输入口令,点击“下一步”:本文转自 victoryan 51CTO博客,原文链接:http://blog.51cto.com/victoryan…

Gram matrix 格拉姆矩阵

2019独角兽企业重金招聘Python工程师标准>>> Gram matrix 度量各个维度自己的特性以及各个维度之间的关系。 来自:https://www.zhihu.com/question/49805962?fromprofile_question_card 由感知机(对偶感知机中需要计算样本点两两之间的内积和…

MySQL日常应用操作记录

1.知道一个字段名,怎样查到它在数据库里的哪张表里? USE Information_schema;SELECT TABLE_NAME FROM COLUMNS WHERE COLUMN_NAME字段名称; MySQL中查看库表字段信息都在information_schemal中,获取数据字典等信息都要通过这个视图。 如&…

如果只做前端验证的话,谈jjdd.com的看照片功能。

如果你在上海,并且坐过地铁的话,你肯定知道jjdd.com。 这个网站和百合,世纪佳缘类似,都是交朋友的性质。 在jjdd.com中有个很重要的功能:如果你上传的照片比你想看的人少的话,你是不能看她的照片的。 例如如…

升级PowerShell至4.0版本

为了更好的使用Cmder v1.2,不得不升级PowerShell为4.0。 不知道Cmder的,可以点击这里:https://github.com/cmderdev/cmder 和 逆天神器 cmder。 Powershell是运行在Windows机器上实现系统和应用程序管理自动化的命令行脚本环境。 需要.NET环境…

备忘(持续更新。。。)

1、在springmvc这个框架里面,创建新的业务逻辑层,dao、service层至少需要一个接口,项目才能跑起来 2、获取当前用户桌面路径 File desktopDir FileSystemView.getFileSystemView() .getHomeDirectory();String desktopPath desktopDir.getA…

SQL PASS西雅图之行——签证篇

本人有幸通过IT168&itpub的站庆活动http://www.itpub.net/thread-1716961-1-1.html,并应微软邀请参加了在西雅图举办的The Conference for SQL Server Professionals(简称SQL-PASS)。 SQL-PASS会议计划于2012年11月6日-9日举行&#xff0…

11.python并发入门(part5 event对象)

一、引入event。 每个线程,都是一个独立运行的个体,并且每个线程的运行状态是无法预测的。 如果一个程序中有很多个线程,程序的其他线程需要判断某个线程的运行状态,来确定自己下一步要执行哪些操作。 threading模块中的event对象…

俞永福卸任阿里大文娱董事长,改任 eWTP 投资组长

两天前(11月13日),阿里文娱董事长俞永福离职的消息,在互联网圈炸了锅。但很快,俞本人就在微博做了澄清,并称“永远幸福,我不会离开”。然而就在今天(11月15日)&#xff0…

Linux查看系统cpu个数、核心书、线程数

Linux查看系统cpu个数、核心书、线程数 现在cpu核心数、线程数越来越高,本文将带你了解如何确定一台服务器有多少个cpu、每个cpu有几个核心、每个核心有几个线程。 查看物理cpu个数 cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l 查看核…

Linux基础篇_01_计算机概论

学习资料:《鸟哥的Linux私房菜(基础篇)》部分:Linux的规划与安装 时间:20130225 学习笔记:计算机定义:接受使用者输入指令与数据, 经由中央处理器的数学与逻辑单元运算处理后&#x…