自用脚本整理

批量生成dockerfile

#!/bin/bash
#遍历所有模块名称
for i in {serviceA,serviceB,serviceC,serviceD,serviceE,serviceF}
do
#进入各模块专属的dockefile目录
cd /root/docker/dockerFile/$i
#令JAR的值,等于目录下的jar包的文件名
JAR=`ls |grep *.jar$`
#令PORT的值,等于docker ps返回的本容器被映射的端口号
#从docker ps输出中过滤出某个模块的整行;
#分割出第12列,得到端口映射关系;
#以“:-”为分隔符分割出第2列,得到容器暴露服务的端口
PORT=``docker ps|grep $i|awk '{print $12}'|awk -F'[:-]' '{print $2}'`
#利用cat EOF 带格式写入dockerfile
cat << EOF > dockerfile
FROM adoptopenjdk/openjdk8:latest
ADD $JAR /root/docker/$i/jar/$JAR
EXPOSE $PORT
ENTRYPOINT ["java","-jar","/root/docker/$i/jar/$JAR"]
EOF
done

将当前目录下的jar包,移动到包含对应关键字的目录下

例如将alfred-userserver-0.0.1-SNAPSHOT.jar ,移动到XX/XX/XX/alfred_user/xx下

#!/bin/bash
#for i in `ls /root/jump-to-aus/*.jar`
for i in `ls |grep \.jar$`
do
  if echo $i |grep user
      then
        mv $i /k8s/alfred-dockerfile/alfred_user
    elif echo $i |grep lockerserver
      then
        mv $i /k8s/alfred-dockerfile/alfred_locker
    elif echo $i | grep file
      then
        mv $i /k8s/alfred-dockerfile/alfred_file
    elif echo $i | grep order
      then
        mv $i /k8s/alfred-dockerfile/alfred_order
    elif echo $i |grep pay
      then
        mv $i /k8s/alfred-dockerfile/alfred_pay
    elif echo $i |grep member
      then
        mv $i /k8s/alfred-dockerfile/alfred_member
    elif echo $i |grep product
      then
        mv $i /k8s/alfred-dockerfile/alfred_product
    elif echo $i |grep notify
      then
        mv $i /k8s/alfred-dockerfile/alfred_notify
    elif echo $i |grep lockerservice
      then
        mv $i /k8s/alfred-dockerfile/alfred_lockerservice
    elif echo $i |grep integration
      then
        mv $i /k8s/alfred-dockerfile/alfred_integration
    elif echo $i |grep monitor 
      then
        mv $i /k8s/alfred-dockerfile/alfred_monitor
  fi

done

批量打包镜像,push镜像,修改模块yaml文件,应用修改

#!/bin/bash
for i in {alfred_file,alfred_integration,alfred_locker,alfred_lockerservice,alfred_member,alfred_notify,alfred_order,alfred_pay,alfred_product,alfred_user}
do
#echo $i
NAME=`echo $i|awk -F_ '{print $2}'`
#echo $NAME
VERSION=`date +"%Y%m%d%H%M"`
#echo $VERSION
#进入各个模块的dockerfile目录
cd /k8s/dockerFile/$i
#将各个模块的jar包同java镜像封装在一起,并打上能够适配私有仓库的标签
docker build -t images.pakpobox.com:5000/pakpobox/$NAME:$VERSION .
#将上一步封装的镜像推到私有仓库
docker push images.pakpobox.com:5000/pakpobox/$NAME:$VERSION
#将封装好的模块所对应的yaml文件更新,替换最新的版本号(日期)
sed -i "s/\:2020.*$/\:$VERSION/" /k8s/yaml_file/service/server-$NAME-deploy.yaml
#利用kubectl apply命令更新现有pod
kubectl apply -f /k8s/yaml_file/service/server-$NAME-deploy.yaml
done

单个模块打包image+push+apply-yaml

#!/bin/bash
i='alfred_user'
#echo $i
NAME=`echo $i|awk -F_ '{print $2}'`
#echo $NAME
VERSION=`date +"%Y%m%d%H%M"`
#echo $VERSION
#进入各个模块的dockerfile目录
cd /k8s/dockerFile/$i
#将各个模块的jar包同java镜像封装在一起,并打上能够适配私有仓库的标签
docker build -t images.pakpobox.com:5000/pakpobox/$NAME:$VERSION .
#将上一步封装的镜像推到私有仓库
docker push images.pakpobox.com:5000/pakpobox/$NAME:$VERSION
#将封装好的模块所对应的yaml文件更新,替换最新的版本号(日期)
sed -i "s/\:2020.*$/\:$VERSION/" /k8s/yaml_file/service/server-$NAME-deploy.yaml
#利用kubectl apply命令更新现有pod
kubectl apply -f /k8s/yaml_file/service/server-$NAME-deploy.yaml
done

版本号控制较严格的项目,打包镜像并运行

#!/bin/bash
#进入打包镜像的目录
cd /k8s/dockerFile/user && echo "已定位到user打包路径" 
#令VERSION的值,等于当前目录下jar包的版本号
VERSION=`ls /k8s/dockerFile/user |grep \.jar$ |awk -F- '{print $2}'`
echo “成功获取版本号”$VERSION
#定义函数DF,其行为是:将本模块的dockerfile内容,按照格式输出到打包路径下,名为“dockerfile”的文件中
DF() 
{
cat << EOF >dockerfile
FROM openjdk:8u191-jdk-alpine
RUN apk add --no-cache fontconfig && apk add --update ttf-dejavu
RUN ln -s /usr/lib/libfontconfig.so.1 /usr/lib/libfontconfig.so && \
            ln -s /lib/libuuid.so.1 /usr/lib/libuuid.so.1 && \
            ln -s /lib/libc.musl-x86_64.so.1 /usr/lib/libc.musl-x86_64.so.1
ENV LD_LIBRARY_PATH /usr/lib
ADD user-$VERSION-SNAPSHOT.jar /app/user-$VERSION-SNAPSHOT.jar
EXPOSE 8080
CMD ["java","-jar","/app/user-$VERSION-SNAPSHOT.jar"]
EOF
}
#执行DF并输出提示
DF && echo "成功应用更变到dockerfile"
#使用获取到的版本号打包镜像,并询问是否删除原先运行的容器,接触端口占用后拉起新的容器
docker build -t pakpobox/user-server:$VERSION-SNAPSHOT . && read -n1 -p "即将删除旧容器,并创建新容器,是否继续?(y/n)" GO
case $GO in
        Y | y) echo

        docker rm -f user && docker run -d --name user \
                        --log-driver json-file \
                        --log-opt max-size=100m \
                        --log-opt max-file=3 \
                        --label production_status=uat \
                        -p 30000:8080 \
                        --env-file /data/application/env/docker.env \
                        -v /etc/localtime:/etc/localtime:ro \
                        -v /etc/timezone:/etc/timezone:ro pakpobox/user-server:$VERSION-SNAPSHOT ;;
        N|n) echo
             echo 未重新创建容器,现在退出
        exit;;
esac

过滤日志关键词,并触发邮件告警

#!/bin/bash
#获取日志路径
file=/var/log/modsec_audit.log
#获取本机IP地址
addr=`ip a|grep eth0|grep inet|awk '{print$2}'`
#定义一个名为act的函数
function act(){
#变量msg是在最后read传进来的,此处不必纠结msg还没定义
#消除输出内容中的单/双引号
msg2=`echo $msg |sed 's/"//g'`
msg3=`echo $msg2 |sed "s/'//g"`
#打印邮件模板套上各个变量,输出到msg.json
echo "{\"title\":\"Federated lockers ? WAF Alert\",\"content\":\"The WAF detected an exception, please check << $file >> for more detail \n <-----FROM-----> \n $addr \n <-----INFO-----> \n $msg3 \n <----LEVEL----> \n Warning \n <-----TIME-----> \n `date` \n \n ????This is a system generated email, pls do not reply. Thank you \",\"mailAddresses\":\"vangee.liang@pakpobox.com;joy.qu@pakpobox.com;yang.gao@pakpobox.com;yinhui.cheng@pakpobox.com;SP-LS@singpost.com;\"}" > msg.json
##测试用sendmail插件发送邮件
#/usr/bin/sendemail -f hiphop321@163.com -t vangee.liang@pakpobox.com -s smtp.163.com -u "ceshi"  -o message-content-type=html -o message-charset=utf8 -xu hiphop321@163.com -xp lwj111 -m "$msg"
#-----------------------------
#用curl命令调用新邮内部邮箱服务器接口
curl -l -H "Content-type: application/json" -X POST  -d "@msg.json" http://192.168.7.36:30004/internal/api/notify/v1/mail/send/direct
}
#实时读取WAF日志,无视缓存,并且不区分大小写的过滤出关键字“Matched“,输出。当输出的执行结果为真,将输出内容赋值给msg,并且执行act,done。
tail -0f $file |grep --line-buffered -iE Matched|while read msg;do act;done

日志切割+转储

#!/bin/bash
#定义名为DT的变量,它的值是年-月-日
DT=`date +"%Y-%m-%d"`
#将日志文件复制,并区分文件名另存;当执行另存成功时才执行清理原日志文件的内容
cp /var/log/modsec_audit.log /var/log/modsec_audit.log_$DT && echo $DT cleanup > /var/log/modsec_audit.log
tar zcvPf /var/log/$DT"_modsec_audit.log.tar.gz" /var/log/modsec_audit.log_$DT --remove-file && mv /var/log/modsec_audit.log_$DT"_modsec_audit.log.tar.gz" /data/WAF-LOG-BAK
#!/bin/bash
#日志源文件以及路径
SRC_LOG=/usr/local/nginx/logs/access.log
#日志归档路径
STORE_PATH=/usr/local/nginx/logs/log_backup
#日志归档名称
STORE_FILE_NAME=$(date +%Y_%m_%d).access.log

cp $SRC_LOG $STORE_PATH/$STORE_FILE_NAME && echo "splint_by_cron_shell" > $SRC_LOG

批量校验容器中的jar包MD5值

这里顺便复习容器外shell控制容器内行为
docker exec -it 容器名

#for循环,遍历当前正在运行的所有java容器,逐个执行容器内命令
for i in `docker ps|grep java|awk '{print $NF}'`; do docker exec -it $i sh -c 'md5sum /app/*.jar'; done

远程拷贝,并且自动跳过已经存在的文件

rsync -avzu --progress /root/client/ root@202.112.23.12:/home/work/

远程拷贝文件备份

执行远程命令,拷贝+压缩+远程拷贝达到备份备份文件的效果

#!/bin/bash
#------定义日期变量-----
DATE=`date +'%Y%m%d%H'`
#-------定义路径变量-----
DIR="/home/zdir-bakup/"
#-----远程执行拷贝zdir整个目录,
#-----成功后执行压缩并删除原文件,
#-----远程拷贝压缩文件到本地,
#-----远程执行删除远端机器3天以上的旧压缩文件
ssh opsuser@10.210.100.17 "sudo cp -r /data/zdir $DIR/zdir-$DATE && sudo tar zcfP $DIR/zdir-$DATE.tar.gz $DIR/zdir-$DATE --remove-file" && scp opsuser@10.210.100.17:$DIR/zdir-$DATE.tar.gz /data/zdir-bakup/ && ssh opsuser@10.210.100.17 "sudo find $DIR -mtime +3 -name *.gz -exec rm {} \;" 
#-----清理本地7天以上的旧压缩文件
sudo find /data/zdir-bakup/ -mtime +7 -name *.gz -exec rm {} \;

日志文件数量大,保留N个,其余执行压缩

#!/bin/bash
#此例保留8个文件
#获取目录下[0-9].log文件数量
NUM=`ls /home/sofar/logs/data-transfer-consumer |grep [0-9].log$|wc -l`
#echo "目前未压缩的文件数量是 $NUM"

#计算将要执行压缩的文件数
EX=$(($NUM-8))
#echo "预计将对前 $EX 个文件执行压缩"

#函数-压缩
YS() {
for i in `ls /home/sofar/logs/data-transfer-consumer |grep [0-9].log$|head -$EX`
do
        tar zcvfP /home/sofar/logs/data-transfer-consumer/$i.tar.gz /home/sofar/logs/data-transfer-consumer/$i --remove-files
done
}
##判断是否需要执行压缩
if (($NUM > "8"));
  then
    echo "检测到当前日志文件数量为$NUM,将对前$EX个文件执行压缩"
    YS
elif (($NUM <= "8"));
  then
    echo "数量小于等于 8,无需操作"
else
    echo "判断时出错"
    break
fi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值