Linux脚本-自动运维部署脚本
背景
公司正常的业务流程是生产服务器上部署的一个程序去读取数据库,并获取所有ip信息,启动socket连接,发送相关业务指令。
目前有一个需求,需要单独测试一个ip,这个单独的ip需要使用另外的程序测试,其他的ip使用原始生产程序测试。并且测试完毕,需要恢复这个ip由生产程序接管。
没有自动化运维脚本的时候,需要把这个ip拆分出来时,我们需要
- 去数据库修改数据(比如:删除待测数据ip或者置可用状态为0)
- 停止原生产程序,并重启该程序(重启后会重新读取数据库,这样就可以排除需要单独测试的ip)
- 启动新程序
在恢复这个ip由生产程序接管时,我们需要
- 停止新程序
- 修改生产数据库,把这个ip恢复
- 重新启动生产程序
在反复操作过程中发现,可以使用自动运维脚本来实现这种繁琐又重复的劳动。
运维脚本
运维脚本分为两个,一个是启动脚本,另外一个是恢复脚本。
启动脚本如下:
#! /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脚本-自动运维部署脚本的更多相关文章
- Linux轻量级自动运维工具-Ansible浅析【转】
转自 Linux轻量级自动运维工具-Ansible浅析 - ~微风~ - 51CTO技术博客http://weiweidefeng.blog.51cto.com/1957995/1895261 Ans ...
- Linux轻量级自动运维工具-Ansible浅析 转
转自 Linux轻量级自动运维工具-Ansible浅析 - ~微风~ - 51CTO技术博客http://weiweidefeng.blog.51cto.com/1957995/1895261 Ans ...
- [自动运维]ant脚本打包,上传文件到指定服务器,并部署
1.根节点使用,表示根目录为当前目录,默认启动的target为build,项目名称为othersysm, <project basedir="." default=" ...
- CentOS 升级 openSSH+ sh脚本自动运维
升级前后对比 openSSH作为linux远程连接工具,容易受到攻击,必须更新版本来解决,低版本有如下等漏洞: OpenSSH 远程代码执行漏洞(CVE-2016-10009) OpenSSH au ...
- linux系统自动备份打包部署脚本
1.使用jenkins配置任务 2.执行脚本放在/home/guard/目录下 #!/bin/sh #author wangxiangyu #当前时间 DATE=$(date +%Y%m%d) #环境 ...
- Linux自动运维工具Ansible的使用
Linux自动运维工具Ansible的使用 我们熟悉这个工具后, 可以很轻松的安装k8s. 一.介绍 ansible - run a task on a target host(s) Ansible是 ...
- 编写一个BAT脚本协助运维人员遇到问题时候调测数据库是否有效连接成功的操作攻略
简单摘要: 1.内网系统出现故障需要排查 2.运维人员不熟悉数据库操作,没法通过连接数据库和执行SQL语句的方式排查数据库及数据是否正常 3.解决方案:编写一个bat脚本,运维人员双击运行即可. ...
- 阿里云运维部署工具AppDeploy详细教程
AppDeploy是一个通过SSH实现的命令行工具,可完成应用部署和远程运维管理.当前工具实现为两个版本:普通版(伪代码描述语言)和Python版.Python版使用Python语法规则,可实现您的各 ...
- 工作中常用Linux命令--服务器运维
工作中常用Linux命令--服务器运维 lsof查看端口使用情况 lsof -i:8080更多lsof命令使用说明:http://www.cnblogs.com/peida/archive/2013/ ...
- Linux centosVMware 自动化运维认识自动化运维、启动salt相关服务、saltstack配置认证、salt-key命令用法、saltstack远程执行命令、saltstack - grains、saltstack – pillar
一.认识自动化运维 传统运维效率低,大多工作人为完成 传统运维工作繁琐,容易出错 传统运维每日重复做相同的事情 传统运维没有标准化流程 传统运维的脚本繁多,不能方便管理 自动化运维就是要解决上面所有问 ...
随机推荐
- CDS标准视图:维修工单工艺数据 I_MAINTORDEROPERATIONDATA
视图名称:维修工单工艺数据 I_MAINTORDEROPERATIONDATA 视图类型:基础 视图代码: 点击查看代码 @EndUserText.label: 'Maintenance Order ...
- 史上最全memcached面试26题和答案
Memcached是什么? Memcached是一个开源的,高性能的内存绶存软件,从名称上看Mem就是内存的意思,而Cache就是缓存的意思. Memcached的作用? Memcached的作用:通 ...
- w3cschool-OpenResty 最佳实践Library
https://www.w3cschool.cn/openresty1/ OpenResty LRR 访问有授权验证的 Redis 2.不重启Redis设置密码: 在配置文件中配置requirepas ...
- Jdk8新特性目录总结
--------------------------------------- Lambda表达式 接口新增方法 四大函数式接口 方法引用 Stream(1) Stream(2) Stream(3) ...
- 《Linux shell 脚本攻略》第1章——读书笔记
目录 文件描述符及重定向 函数和参数 迭代器 算术比较 文件系统相关测试 字符串进行比较 文件描述符及重定向 echo "This is a sample text 1" > ...
- WordPress产品导入后内容出现乱码,以及附属一些别的功能
效果图如下 该插件附带了一个可以把产品描述里面的超链接给去掉,以及有的产品图片点击会在地址栏上面显示图片的路径,在该插件可以进行关闭,并且替换成一个模态窗,还有对产品邮费展示进行了处理,到金额到达包邮 ...
- Nmap 图形界面使用
Nmap 图形界面的使用 Zenmap,作为Nmap的图形用户界面(GUI),为用户提供了一个直观.易用的方式来执行网络扫描和分析.以下是一个关于如何使用Zenmap的详细指南. 扫描主机 使用Zen ...
- Hive源码解析环境搭建
一.准备工作 1.1 下载地址 https://github.com/apache/hive https://dlcdn.apache.org/hive/ 版本:2.3.9 1.2 环境依赖 had ...
- 13. Docker-compose容器编排(详解说明)
13. Docker-compose容器编排(详解说明) @ 目录 13. Docker-compose容器编排(详解说明) 1. Docker-compose容器编排概述 2. Docker-Com ...
- 实战AI大模型辅助编程:新安江水文模型和SCE-UA优化算法的移植与实现
新安江水文模型与 SCE-UA 优化算法是水文学和水资源管理领域的重要工具,二者结合使用可以有效模拟流域的水文过程并优化模型参数. 新安江水文模型是一种概念性水文模型,主要用于模拟流域的降雨-径流关系 ...