背景

公司正常的业务流程是生产服务器上部署的一个程序去读取数据库,并获取所有ip信息,启动socket连接,发送相关业务指令。

目前有一个需求,需要单独测试一个ip,这个单独的ip需要使用另外的程序测试,其他的ip使用原始生产程序测试。并且测试完毕,需要恢复这个ip由生产程序接管。

没有自动化运维脚本的时候,需要把这个ip拆分出来时,我们需要

  1. 去数据库修改数据(比如:删除待测数据ip或者置可用状态为0)
  2. 停止原生产程序,并重启该程序(重启后会重新读取数据库,这样就可以排除需要单独测试的ip)
  3. 启动新程序

在恢复这个ip由生产程序接管时,我们需要

  1. 停止新程序
  2. 修改生产数据库,把这个ip恢复
  3. 重新启动生产程序

在反复操作过程中发现,可以使用自动运维脚本来实现这种繁琐又重复的劳动。

运维脚本

运维脚本分为两个,一个是启动脚本,另外一个是恢复脚本。

启动脚本如下:

#! /bin/bash

# author: ging
# date: 2020-07-22 ip=$1;
port=$2;
jarname=$3 user=XXX
passwd=XXX
sqlport=3306
host=XXX
autodir=/data/sg/testled
curdate="`date +%Y-%m-%d,%H:%M:%S`";
table_name="t_led_reader_lnk" # save ori sql info
echo "${curdate}:start back up ori sql info" >> ${autodir}/autostart.txt if [ -f "${autodir}/${table_name}.sql" ];then
echo "${curdate}:文件存在,先删除!" >> ${autodir}/autostart.txt
rm -rf ${autodir}/${table_name}.sql
else
echo "${curdate}:文件不存在,可以直接导入" >> ${autodir}/autostart.txt
fi mysqldump -u$user -p$passwd -h$host -P$sqlport sg ${table_name} > ${table_name}.sql if [ -f "${autodir}/${table_name}.sql" ];then
echo "${curdate}:导入成功!" >> ${autodir}/autostart.txt
else
echo "${curdate}:导入失败!" >> ${autodir}/autostart.txt
return;
fi # delete that line for ip and port
delete_sql="delete from ${table_name} where led_ip='${ip}'"
mysql -u$user -p$passwd -h$host -P$sqlport sg -e "${delete_sql}" -vvv > ${autodir}/autostart-delete.txt #jurge if delete-success
grep "Query OK, 1 row affected" ${autodir}/autostart-delete.txt >/dev/null
if [ $? -eq 0 ]; then
echo "${curdate}:删除成功!" >> ${autodir}/autostart.txt
else
echo "${curdate}:删除失败!" >> ${autodir}/autostart.txt
return;
fi # stop led-send
ps -ef | grep "java" | grep "/data/sg/ledsend" | awk '{print $2}' | xargs kill -9
if [ $? -eq 0 ]; then
echo "${curdate}:关闭程序成功!" >> ${autodir}/autostart.txt
else
echo "${curdate}:关闭程序失败!" >> ${autodir}/autostart.txt
return;
fi # restart led-send
nohup java -XX:-UseAdaptiveSizePolicy -XX:SurvivorRatio=8 -jar /data/sg/ledsend-0.0.1-SNAPSHOT.jar --spring.profiles.active=verify > /data/sg/lslog.txt 2>&1 & if [ $? -eq 0 ]; then
echo "${curdate}:重启程序成功!" >> ${autodir}/autostart.txt
else
echo "${curdate}:重启程序失败!" >> ${autodir}/autostart.txt
return;
fi # start testledjar]
nohup java -jar /data/sg/testled/${jarname} > /data/sg/testled/testled_${jarname}.txt 2>&1 & if [ $? -eq 0 ]; then
echo "${curdate}:启动测试程序成功!" >> ${autodir}/autostart.txt
else
echo "${curdate}:重启测试程序失败!" >> ${autodir}/autostart.txt
return;
fi

恢复脚本如下:

#! /bin/bash

# author : ging
# date : 2020-07-22 # stop the test jar jarname=$1 user=root
passwd=123456
sqlport=3306
host=127.0.0.1
autodir=/data/sg/testled
curdate="`date +%Y-%m-%d,%H:%M:%S`"; ledjarname=$2 ps -ef | grep "java" | grep "${jarname}" | awk '{print $2}' | xargs kill -9
if [ $? -eq 0 ]; then
echo "${curdate}:关闭测试程序成功!" >> ${autodir}/autorecover.txt
else
echo "${curdate}:关闭测试程序失败!" >> ${autodir}/autorecover.txt
return;
fi #recover the sql
mysql -u$user -p$passwd -h$host -P$sqlport -Dsg < ${autodir}/t_led_reader_lnk.sql > ${autodir}/autostop-recover.txt # stop led-send
ps -ef | grep "java" | grep "/data/sg/ledsend" | awk '{print $2}' | xargs kill -9
if [ $? -eq 0 ]; then
echo "${curdate}:关闭程序成功!" >> ${autodir}/autorecover.txt
else
echo "${curdate}:关闭程序失败!" >> ${autodir}/autorecover.txt
return;
fi # restart led-send
nohup java -XX:-UseAdaptiveSizePolicy -XX:SurvivorRatio=8 -jar /data/sg/${ledjarname} --spring.profiles.active=verify > /data/sg/lslog.txt 2>&1 & if [ $? -eq 0 ]; then
echo "${curdate}:重启程序成功!" >> ${autodir}/autorecover.txt
else
echo "${curdate}:重启程序失败!" >> ${autodir}/autorecover.txt
return;
fi

Linux脚本-自动运维部署脚本的更多相关文章

  1. Linux轻量级自动运维工具-Ansible浅析【转】

    转自 Linux轻量级自动运维工具-Ansible浅析 - ~微风~ - 51CTO技术博客http://weiweidefeng.blog.51cto.com/1957995/1895261 Ans ...

  2. Linux轻量级自动运维工具-Ansible浅析 转

    转自 Linux轻量级自动运维工具-Ansible浅析 - ~微风~ - 51CTO技术博客http://weiweidefeng.blog.51cto.com/1957995/1895261 Ans ...

  3. [自动运维]ant脚本打包,上传文件到指定服务器,并部署

    1.根节点使用,表示根目录为当前目录,默认启动的target为build,项目名称为othersysm, <project basedir="." default=" ...

  4. CentOS 升级 openSSH+ sh脚本自动运维

     升级前后对比 openSSH作为linux远程连接工具,容易受到攻击,必须更新版本来解决,低版本有如下等漏洞: OpenSSH 远程代码执行漏洞(CVE-2016-10009) OpenSSH au ...

  5. linux系统自动备份打包部署脚本

    1.使用jenkins配置任务 2.执行脚本放在/home/guard/目录下 #!/bin/sh #author wangxiangyu #当前时间 DATE=$(date +%Y%m%d) #环境 ...

  6. Linux自动运维工具Ansible的使用

    Linux自动运维工具Ansible的使用 我们熟悉这个工具后, 可以很轻松的安装k8s. 一.介绍 ansible - run a task on a target host(s) Ansible是 ...

  7. 编写一个BAT脚本协助运维人员遇到问题时候调测数据库是否有效连接成功的操作攻略

    简单摘要: 1.内网系统出现故障需要排查 2.运维人员不熟悉数据库操作,没法通过连接数据库和执行SQL语句的方式排查数据库及数据是否正常 3.解决方案:编写一个bat脚本,运维人员双击运行即可.   ...

  8. 阿里云运维部署工具AppDeploy详细教程

    AppDeploy是一个通过SSH实现的命令行工具,可完成应用部署和远程运维管理.当前工具实现为两个版本:普通版(伪代码描述语言)和Python版.Python版使用Python语法规则,可实现您的各 ...

  9. 工作中常用Linux命令--服务器运维

    工作中常用Linux命令--服务器运维 lsof查看端口使用情况 lsof -i:8080更多lsof命令使用说明:http://www.cnblogs.com/peida/archive/2013/ ...

  10. Linux centosVMware 自动化运维认识自动化运维、启动salt相关服务、saltstack配置认证、salt-key命令用法、saltstack远程执行命令、saltstack - grains、saltstack – pillar

    一.认识自动化运维 传统运维效率低,大多工作人为完成 传统运维工作繁琐,容易出错 传统运维每日重复做相同的事情 传统运维没有标准化流程 传统运维的脚本繁多,不能方便管理 自动化运维就是要解决上面所有问 ...

随机推荐

  1. JpaRepository动态代理执行原理

    本文基于spring-boot-starter-data-jpa:2.7.17分析 SpringBoot 里集成Jpa自动配置是如何处理的 通过分析SpringBoot 自动配置核心源码可以找到Jpa ...

  2. Python在多个Excel文件中找出缺失数据行数多的文件

      本文介绍基于Python语言,针对一个文件夹下大量的Excel表格文件,基于其中每一个文件内.某一列数据的特征,对其加以筛选,并将符合要求与不符合要求的文件分别复制到另外两个新的文件夹中的方法. ...

  3. 画(HB To Ryby!)

      "客人,请描述得具体一点."   他似乎还是很难为情.   "呃--就是--一个女孩儿",他又勉强启开嘴,"女孩儿"三个字几乎被咽进嗓子 ...

  4. Index - 此处的诗

    虚构往事 正篇   嗯--本来发过两篇,但深愧于仓促的处理和并未完善的细节设定,隐藏了.   大概会是一个中篇的科幻故事,世界设定已经完善了(Shaya 可以作证!),但近期可能没有精力动笔. 番外 ...

  5. Hyper-V创建虚拟机配置IP等网络配置原理(Linux、Windows为例)

    大家知道Windows系统里面内置了Hyper-V管理器,用来创建和管理本地虚拟机环境.今天我创建了两台虚拟机,一台是CentOS7.9(Linux),另一台是Windows 11,然后发现,Linu ...

  6. $router.options.routes取不到全部路由

    最近在看老项目的路由逻辑 项目使用constantRoutes和asyncRoutes分别代表基本路由和动态路由.createRouter时,传入的routes参数只有基本路由 在路由导航守卫中,判断 ...

  7. 452:管理压缩的TAR存档

  8. PayDay Intermediate

    nmap + dirsearch 发现web站点 扫目录 ┌──(root㉿kali)-[/home/ftpuserr] └─# nmap -p- -A 192.168.167.39 Starting ...

  9. 第1章 C#和.NET Framework简介

    第1章 C#和.NET Framework简介 1.6 CLR 和 .NET Framework .NET Framework 由 CLR 和大量程序库组成.这些程序库由核心库和应用库组成,应用库依赖 ...

  10. 解决当前标识(IIS APPPOOL\XXXX)没有对“C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files”的写访问权限的问题

    1.问题描述 在Windows Server2019数据中心版中搭建IIS项目,访问的时候出现如下所示的错误: 当前标识(IIS APPPOOL\XXXX)没有对"C:\Windows\Mi ...