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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM