背景

公司正常的业务流程是生产服务器上部署的一个程序去读取数据库,并获取所有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. 开源 Material Design WPF UI 控件库,易用且功能强大

    前言 Material Design 是由 Google 开发的一套设计指南,提供统一的设计语言,使用户界面更加直观.美观和一致. Material Design In XAML Toolkit 是一 ...

  2. Uniapp仿ChatGPT Stream流式输出(非Websocket)

    前言 最近写一个chagpt小程序,流式输出可以使用websocket也可以使用stream来实现,这里就不折腾websocket的了,我发现uniapp实现流式输出的方式挺多的,主要是有些小程序还不 ...

  3. python封装https请求

    1 import http.client 2 import json 3 4 class HTTPS_Connection: 5 6 def __init__(self, res_type, body ...

  4. 2025-01-15:执行操作可获得的最大总奖励 Ⅰ。用go语言,给定一个整数数组 rewardValues,其中包含 n 个代表奖励值的数字。 你开始时的总奖励 x 为 0,并且所有下标都是未标记状

    2025-01-15:执行操作可获得的最大总奖励 Ⅰ.用go语言,给定一个整数数组 rewardValues,其中包含 n 个代表奖励值的数字. 你开始时的总奖励 x 为 0,并且所有下标都是未标记状 ...

  5. Chrony:让你的服务器时间精准到微秒级的神器!

    在现代计算机系统中,时间同步是至关重要的.无论是分布式系统.数据库集群,还是日志记录,时间不一致都可能导致严重的问题.而 Chrony,作为一款高性能的时间同步工具,正在成为越来越多系统管理员的首选. ...

  6. 二叉树神级遍历算法:morris遍历算法

    morris遍历的实质 建立一种机制,对于没有左子树的节点只到达一次,对于有左子树的节点会到达两次 morris遍历的实现原则 记作当前节点为cur. 如果cur无左孩子,cur向右移动(cur=cu ...

  7. LVGL图形库

    一.LVGL实现思想 LVGL以结构体的形式来实现类 父子对象的关系 1.子对象会随着父对象移动 2.子对象超出父对象范围的部分不显示 二.基础对象部件 基础对象lv_obj可以作为父对象来创建其它对 ...

  8. [python]png转webp的命令行工具

    前言 网页上使用webp格式的图片更加省网络流量和存储空间,但本地图片一般是png格式的,所以考虑用python的pillow库将png格式的图片转换为webp格式. 需求: 可以在系统任意地方调用. ...

  9. 一款由 .NET 官方团队开源的电子商务系统 - eShop

    项目介绍 eShop是一款由.NET官方开源的,基于.NET Aspire构建的用于参考学习的服务架构电子商务系统,旨在展示如何利用.NET框架及其相关技术栈构建一个现代化的电子商务网站.该项目采用服 ...

  10. AI图像翻译

    在当今互联互通的世界中,快速准确地翻译图像中的文本的能力非常宝贵.无论您是商务人士.教育工作者.设计师还是内容创作者,Visual Paradigm Online 的 AI 图像翻译器都能提供强大的解 ...