使用shell脚本完成自动化部署jar包
文章目录
- 1.前言
- 2.跳板机
- 3.服务器
- 4.注意事项
1.前言
首先我们这里有一台跳板机,然后有一台服务器,现在的要做的就是将跳板机上的jar包文件,然后通过服务器上的脚本实现旧jar包的备份,新jar包的启动。
使用起来很简单:begin.sh demo-V2.0.jar
实现部署的操作:拷贝jar包到服务器 -> 备份旧服务jar包 -> 启动新服务jar包
2.跳板机
以下代码就是跳板机上的程序begin.sh
#!/bin/sh
fileName=$1
if [ -z "$fileName" ]; then
echo "文件名不能为空"
exit 0
fi
echo "开始拷贝jar文件【$fileName】到hadoop-slave1"
scp $fileName root@hadoop-slave1:/usr/local/test/
echo "文件传输结束"
ssh root@hadoop-slave1 /usr/local/test/backup-and-start.sh $fileName
解释一下,上面这段程序分三个部分:
- 判断输入的jar包名是不是空的,是空的就结束
- 将jar包拷贝到我们的
hadoop-slave1服务器
上 - 执行hadoop-slave1服务器上的启动脚本
backup-and-start.sh
3.服务器
通过上面的跳板机上的代码,我们知道跳板机最终会调用服务器上/usr/local/test/backup-and-start.sh
这个shell脚本命令。这个命令的代码如下;
#!/usr/bin/env bash
echo "服务器开始部署服务"
projectname="demo"
#打开文件所属的目录,不然远程执行会找不到当前目录
cd /usr/local/test
#新的jar包会当成参数传过来
newJar=$1
echo "新的jar为:$newJar"
#如果新的jar包为空则退出
if [ -z "$newJar" ]; thenecho "新的jar不能为空"exit 0
fi
#获取旧的jar包名称,当然可能是空的,也可能跟当前名称一致
oldJar=$(ps -ef | grep ${projectname}|grep -v 'backup-and-start.sh'|grep -v grep|awk '{print $10}'|cut -d '/' -f 2)
echo "当前运行的旧的jar包为:$oldJar"
#如果新的jar包为空则退出
if [ -z "$oldJar" ]; thenecho "没有启动的demo服务"
else#如果旧的进程还在就将旧的进程杀掉oldId=`ps -ef|grep ${projectname}|grep -v "$0"|grep -v "grep"|awk '{print $2}'`echo "$oldId"echo "kill old process start ..."for id in $oldIddokill -9 $idecho "killed $id"doneecho "kill old process end"#获取当前时间suffix=".bak-"`date '+%Y%m%d'`;echo $suffix;#将旧的jar包进行备份mv $oldJar ${oldJar}${suffix}
fi
#上面的步骤是杀掉旧的进程,下面开始启动新的进程
nohup java -jar ${1} > ${1}.log 2>&1 &
echo "服务启动查看进程:"
echo `ps -ef | grep ${projectname}|grep -v 'backup-and-start.sh'|grep -v grep`
我解释一下上面其实一共做了以下几个工作:
- 打开当前目录,如果远程执行,这个步骤必须有
- 获取当前正在运行的服务jar包名称
- 如果步骤2没有获取到jar包名称,代表没有运行的服务直接跳到步骤6
- 如果步骤2获取到了jar包名称则获取这个进程的id
- 杀掉正在运行的进程,并将旧的jar服务备份
- 启动新的服务jar包,新的服务jar就是从跳板机传过来的那个
- 查询服务是否已启动
4.注意事项
如果是服务器上的脚本/usr/local/test/backup-and-start.sh
,使用如下解释头
#!/usr/bin/env bash
来替换原来的解释头
#!/usr/bin/bash
以免出现环境变量问题的报错。
具体的原因如下
#!/usr/bin/env bash #lends you some flexibility on different systems
#!/usr/bin/bash #gives you explicit control on a given system of what executable is called
通过/usr/bin/env 运行程序
优点:
用户不需要去寻找程序在系统中的位置(因为在不同的系统,命令或程序存放的位置可能不同),只要程序在你的$PATH中;
它会根据你的环境寻找并运行默认的版本,提供灵活性。
缺点:
- 不好的地方是,有可能在一个多用户的系统中,别人在你的$PATH中放置了一个bash,可能出现错误。
大部分情况下,/usr/bin/env是优先选择的,因为它提供了灵活性,特别是你想在不同的版本下运行这个脚本;而指定具体位置的方式#! /usr/bin/bash,在某些情况下更安全,因为它限制了代码注入的可能。
使用shell脚本完成自动化部署jar包相关推荐
- Linux自定义shell脚本一键启停jar包
Linux运行jar包脚本,我的 jar包和 .sh文件在同一目录. #!/bin/sh port=8090 #端口 jar_name=ruoyi-admin.jar #/usr/local/ry-v ...
- Linux(Ubuntu)下设置开机自启shell脚本执行Java程序jar包
一.建立脚本文件: 二.设置权限 三.将脚本文件放到启动目录下 四.更新优先级 cd /etc/init.d sudo update-rc.d startm.sh defaults 90 至此,开机启 ...
- Maven学习总结(48)——利用wagon-maven-plugin插件自动化部署Jar包/war包到Linux远程服务器
前言: Maven项目可使用mvn package指令打包,打包完成后包位于target目录下,要想在远程服务器上部署,首先要将包上传到服务器.程序开发完成后部署到线上Linux服务器,可能需要经历打 ...
- Linux shell脚本启动 停止 重启jar包
只需将jar文件的路径替换到APP_NAME的值及JAVA_HOME的值就可以了,其他不用改. 注意:window编辑的shell文件,通过WinSCP上传的Linux服务器,需要改变文件的格式(查看 ...
- Linux配置脚本导出运行,linux服务器部署jar包以及shell脚本的书写
背景:记录在linux环境下部署jar程序的过程 1 部署过程记录 1.1 程序结构 这里的main函数就在DemRest2.java 文件中. 为了部署方便,要做到以下两点: 1 在导出的jar包中 ...
- jar包部署shell脚本编写,在服务器上部署jar包,在Linux服务器上部署服务,设置编码格式,设置内存管理
准备步骤: 1.安装java环境,知道java安装目录 2.将jar包拖放或发送至服务器中(目录自定义) 一.编写shell脚本,将以下代码放在shell脚本中,将shell脚本放在jar包同级目录下 ...
- Jenkins部署war包和部署jar包的详细步骤
目录 零.配置Tomcat 一.自由风格项目远程部署war包 1.创建自由风格项目 2.增加构建步骤 3.增加构建后操作 4.立即构建 5.查看控制台输出 二.创建流水线项目远程部署war包 1.拉取 ...
- docker部署jar包的几种方式
docker部署jar包的几种方式 前言 使用Dockerfile手动打包jar 简单打包运行 进化:可复用容器 究极进化:jdk镜像直接创建可服用容器 超究极进化:maven插件打包(不推荐) 无聊 ...
- 通过.sh文件快捷部署jar包到服务器上
参考博客:https://blog.csdn.net/qq_43382350/article/details/125008727 直接写一个脚本文件,每次运行这个文件就可以通过.sh文件快捷部署jar ...
最新文章
- Java的SPI机制
- python替换字符串内容
- 一文了解物联网主控芯片架构之争
- 内存管理[6]测试堆的内存占用情况
- 怎么在Caffe中配置每一个层的结构
- Python实现-中介者模式
- LeTax报错之 Incomplete \iffalse
- SIMD via C#
- 列举网络芳邻的网络资源
- JAVA面试题:你怎么设计一个消息队列?
- 阶段3 1.Mybatis_05.使用Mybatis完成CRUD_8 Mybatis中的返回值深入-调整实体类属性解决增和改方法的报错...
- python复杂网络分析_科学网—复杂网络分析库NetworkX学习笔记(3):网络演化模型 - 闫小勇的博文...
- dw添加下拉菜单_Dreamweaver怎么创建下拉菜单
- 玩平衡车系列——编码器使用教程与测速原理
- 有关java多态性的介绍
- 计算机文化基础多选题答案,计算机基础多选题集(附答案)
- 记一次微信分享的坑,ios和安卓分享打开的url不一样
- 需求预测模型分类与选择
- 单光感pid巡线_技术解析——单颜色传感器巡线中的PID控制器
- 《CCNA学习指南:Cisco网络设备互连(ICND2)(第4版)》——1.1节理解VLAN 和VLAN Trunk 及排除相关故障...