目录
批量生成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
308

被折叠的 条评论
为什么被折叠?



