• Linux脚本-自动运维部署脚本


    背景

    公司正常的业务流程是生产服务器上部署的一个程序去读取数据库,并获取所有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
    
    
  • 相关阅读:
    jq获取img高度(动态生成的image高度为0原因)
    Idea集成使用SVN教程
    RPC框架pigeon源码分析
    java多线程面试题整理及答案
    深入理解JVM线程模型
    dubbo 2.8.4(dubbox)的jar包制作【添加到maven本地仓库】
    【学习】027 Dubbo
    【学习】026 Zookeeper
    【学习】025 RocketMQ
    【学习】024 springCloud
  • 原文地址:https://www.cnblogs.com/ging/p/13467969.html
Copyright © 2020-2023  润新知