前言:
看过前两天文章的同学应该知道,这两天正常工作的同时也在并行处理产品主线中出现的相同问题,主线产品
已经在全国上百个局点使用过,并且有的局点已经打过其它的补丁,所有一直在梳理出一个通用补丁
,并且不会因为不同局点的不同基线版本导致的补丁重出问题
,补丁的主要功能已经基本实现,通过java attach热加载
的方式实现,但是基于方便别人就是方便自己的原则
(注:公司各个局点的产品都是由各个办事处的一线人员维护,安防公司一般都是办事处多,局点多,局点问题也多),今天简单写了一个shell脚本用于一键部署
功能,也便于一线人员实施补丁,shell脚本的思路简单分享一下,具体发布的脚本明天去公司再完善一下;
注:处理局点问题很磨人,比较紧急的情况需要24h待命;
产品环境:centos + docker + jdk1.8
分析思路:
补丁的脚本是位于宿主机上,业务程序位于docker容器内,宿主机上的脚本会把补丁包替换到docker容器内,并执行attach.jar程序,重写业务程序publicserver.jar服务上的问题类,当前的问题不涉及程序配置文件的修改;
实现详情:
1)宿主机补丁结构:
是部署到宿主机上的
patch.sh脚本:
#!/bin/bash
echo "第一步:查询容器id"
containerId=$(docker ps -aqf "name=mycentos")
echo "容器id为:$containerId"
echo "第二步:拷贝attach至容器内"
docker cp patchAgent "mycentos":/home/
echo "attach拷贝到容器mycentos成功!"
echo "第三步:执行补丁包attach"
#startJar="nohup java -jar /home/patchAgent/testDemo.jar >./start.log 2>&1 &"
docker exec -it ${containerId} /bin/bash -c "cd /home/patchAgent && chmod u+x start.sh && sh start.sh"
#docker exec -it "mycentos" /bin/bash
echo "补丁执行成功!"
2)docker容器内attach补丁结构:
是部署到容器内部的,patchAgent补丁目录的部署是通过宿主机上的shell脚本copy到容器内的;
start.sh脚本是用于启动attach.jar补丁的
start.sh脚本:
#!/bin/bash
nohup java -jar /home/patchAgent/testDemo.jar >./start.log 2>&1 &
执行结果:
1)宿主机
2)容器内attach.jar程序已运行
遇到的问题:
在梳理过程中,也遇到一些问题,主要是shell脚本格式的问题,这里总结分享一下!!!
运行脚本是报 line 1: #!/bin/bash: No such file or directory
linux
转换.sh脚本格式方式:
- 安装格式转换工具:yum install dos2unix -y
- 格式转换: dos2unix start.sh
- 再次运行 sh start.sh 脚本执行正常
window
转换.sh格式:
windows下可以直接使用notepad++
进行转换。
点击菜单栏的编辑->文档格式转换->转换为UNIX格式
,完成转换。
=注:通过界面实现补丁已经升级功能,后续有时间再整理=