当前位置:首页 > 科技  > 软件

手把手教你写一个Shell脚本部署你的服务

来源: 责编: 时间:2023-11-28 09:33:47 316观看
导读我们都知道,在开发的过程中,有很多部署自己微服务的方式,其中有各种各样的不同操作,比如使用 docker 打包为镜像的方式,还有基础使用 jar 包的方式进行部署,但是呢?使用 jar 包部署,那就离不开这个启动 jar 包的脚本命令,总不

我们都知道,在开发的过程中,有很多部署自己微服务的方式,其中有各种各样的不同操作,比如使用 docker 打包为镜像的方式,还有基础使用 jar 包的方式进行部署,但是呢?使用 jar 包部署,那就离不开这个启动 jar 包的脚本命令,总不能每次都是直接自己手动杀端口,然后再重新启动吧,今天了不起来带大家看一下这个 Shell 脚本,并且写一个 Shell 脚本通用给大家,拿来可用。tG228资讯网——每日最新资讯28at.com

如果想直接拿这个脚本改一下用的,不想看这个基础内容的,可以直接拉到最后了。tG228资讯网——每日最新资讯28at.com

1.查看自己当前系统默认的 Shell

echo $SHELL

输出:/bin/bashtG228资讯网——每日最新资讯28at.com

2.查看系统支持的Shell

cat /etc/shells

输出:tG228资讯网——每日最新资讯28at.com

/bin/sh /bin/bash /usr/bin/sh /usr/bin/bashtG228资讯网——每日最新资讯28at.com

也就是说,我们的云服务器是支持我们在这里给他安排 Shell 脚本的tG228资讯网——每日最新资讯28at.com

我们这时候先来安排一下 sh 的文件,创建一个文件夹,然后在其中创建一个 sh 的文件。tG228资讯网——每日最新资讯28at.com

mkdir /usr/local/shelltest

touch test.sh

创建完成我们编辑一下内容tG228资讯网——每日最新资讯28at.com

vim test.sh

#!/bin/bashecho "Hello World Shell"

然后我们出来运行一下我们的 Shell 的第一个脚本tG228资讯网——每日最新资讯28at.com

bash test.sh

出来的结果是 Hello World Shell.tG228资讯网——每日最新资讯28at.com

我们知道其实 Shell脚本没那么复杂,一个启动 jar 包的启动,可能用到的用法就一些,我们来看一下另外的几个必备的语法tG228资讯网——每日最新资讯28at.com

if

if ...then        ...else    ...fi

接下来我们看一段脚本,来根据脚本分析tG228资讯网——每日最新资讯28at.com

start() {  echo ""  pid=$(ps -ef | grep $jar_name | grep -v grep | awk '{print $2}')  if [ -z $pid ]; then    cd $jar_path  # 这里转到jar包目录执行命令,是为了使用jar_path下的config文件,貌似java程序只能识别当前执行命令目录下的配置,否则就是使用已打入Jar包的配置文件。    nohup java -jar $jar_name >$log_path 2>&1 &    pid=$(ps -ef | grep $jar_name | grep -v grep | awk '{print $2}')    echo "应用 ${jar_name}启动成功,pid=${pid}"    # tail -f $log_path   else    echo "应用 ${jar_name} 正在运行,pid = ${pid}"  fi  echo ""}

start() 顾名思义,这明显就是一个 start 方法,方法体的内容则是花括号内的内容。tG228资讯网——每日最新资讯28at.com

echo 我们都知道了,就是输出个内容
ps -ef | grep

这个命令更不用多说了,那直接就是用来查询应用的端口号的,后面跟着我们的jar_name 实际上就是一个变量,直接获取的我们在方法外面定义的tG228资讯网——每日最新资讯28at.com

后面的awk其实就相当于是信息的读入tG228资讯网——每日最新资讯28at.com

也就是说,我们在执行 sh start.sh start 的方法的时候,然后会读取我们接下来输入的内容,接下来就进入了判断环节。tG228资讯网——每日最新资讯28at.com

cd $jar_path  # 这里转到jar包目录执行命令,是为了使用jar_path下的config文件,貌似java程序只能识别当前执行命令目录下的配置,否则就是使用已打入Jar包的配置文件。 nohup java -jar $jar_name >$log_path 2>&1 & 这个则是我们最重要的启动Jar包的版本

nohup 这个命令的标识则是我们使用后台启动的方式,不必再关注如果执行jar -jar 的时候,我们关闭了当前的窗口,结果我们的服务就被迫终止了,而后面,我们还贴心的又查询了一下这个服务,然后把我们的服务是否启动成功给大家展示出来,如果运行之后,就会出现 应用xxx启动成功,pid = xxxxx的标志了。tG228资讯网——每日最新资讯28at.com

看完了我们的启动命令,接下来就得看我们的停止命令了。tG228资讯网——每日最新资讯28at.com

stop() {  echo ""  pid=$(ps -ef | grep $jar_name | grep -v grep | awk '{print $2}')  if [ -z $pid ]; then # -z 是判断是否为空    echo "${jar_name}未运行!"  else    echo "准备关闭进程$pid"    kill -9 $pid    sleep 0.5    echo "${jar_name}已关闭!"  fi  echo ""}

这个stop的方法几句比较简单了,接受收入内容,然后判断这个 jar 包是否在运行当中,如果运行的话,那么找到这个端口,然后关闭到这个进程号,最后给我们输出一个 xxxx已关闭tG228资讯网——每日最新资讯28at.com

我们再来看一个重启的方法:tG228资讯网——每日最新资讯28at.com

restart() {  stop  sleep 2  echo "停止完成,准备启动jar包"  start}

这个更不用说了,我们写了 start 和 stop  只要在这个 restart里面去执行一下这个 stop 然后等待一会,然后再启动就完事了。tG228资讯网——每日最新资讯28at.com

完整的脚本如下tG228资讯网——每日最新资讯28at.com

#替换成你的jar包jar_name=cloud-ui-zhiyikeji.jarjar_path=/usr/webjar/log_path=/usr/webjar/logs/`date +%y-%m-%d`_out.log#指向自定义jdk#export JAVA_HOME=/usr/jdk/jdk1.8.0_381#export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar#export PATH=$JAVA_HOME/bin:$PATHstop() {  echo ""  pid=$(ps -ef | grep $jar_name | grep -v grep | awk '{print $2}')  if [ -z $pid ]; then # -z 是判断是否为空    echo "${jar_name}未运行!"  else    echo "准备关闭进程$pid"    kill -9 $pid    sleep 0.5    echo "${jar_name}已关闭!"  fi  echo ""}start() {  echo ""  pid=$(ps -ef | grep $jar_name | grep -v grep | awk '{print $2}')  if [ -z $pid ]; then    cd $jar_path  # 这里转到jar包目录执行命令,是为了使用jar_path下的config文件,貌似java程序只能识别当前执行命令目录下的配置,否则就是使用已打入Jar包的配置文件。    nohup java -jar $jar_name >$log_path 2>&1 &    pid=$(ps -ef | grep $jar_name | grep -v grep | awk '{print $2}')    echo "应用 ${jar_name}启动成功,pid=${pid}"    # tail -f $log_path   else    echo "应用 ${jar_name} 正在运行,pid = ${pid}"  fi  echo ""}status() {  echo ""  pid=$(ps -ef | grep $jar_name | grep -v grep | awk '{print $2}')  if [ -z $pid ]; then    echo "应用 ${jar_name} 未运行"  else    echo "应用 ${jar_name} 正在运行,pid = ${pid}"  fi  echo ""}restart() {  stop  sleep 2  echo "停止完成,准备启动jar包"  start}action() {  echo "请输入数字选择要执行的操作:1=启动,2=重启,3=停止,4=查看运行状态,5=退出"  echo '你输入的数字为:'  read a  case $a in  "1")    start    ;;  "2")    restart    ;;  "3")    stop    ;;  "4")    status    ;;  "5")    exit 1    ;;  *)    echo "输入错误,请重新输入"    action    ;;  esac}action

脚本奉上,我们需要做的就是更改一下前面的jar包的路径已经jar包的相关内容即可实现shell脚本来启动自己的jar包了。tG228资讯网——每日最新资讯28at.com

你学会了么?tG228资讯网——每日最新资讯28at.com

tG228资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-34602-0.html手把手教你写一个Shell脚本部署你的服务

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 我们一起聊聊异地多活之业务定制型异地多活架构

下一篇: Python GUI 编程:dearpygui 和 tkinter 的对比与选择!

标签:
  • 热门焦点
  • 小米官宣:2023年上半年出货量中国第一!

    今日早间,小米电视官方微博带来消息,称2023年小米电视上半年出货量达到了中国第一,同时还表示小米电视的巨屏风暴即将开始。“公布一个好消息2023年#小米电视上半年出货量中国
  • 直屏旗舰来了 iQOO 12和K70 Pro同台竞技

    旗舰机基本上使用的都是双曲面屏幕,这就让很多喜欢直屏的爱好者在苦等一款直屏旗舰,这次,你们等到了。据博主数码闲聊站带来的最新爆料称,Redmi下代旗舰K70 Pro和iQOO 12两款手
  • Flowable工作流引擎的科普与实践

    一.引言当我们在日常工作和业务中需要进行各种审批流程时,可能会面临一系列技术和业务上的挑战。手动处理这些审批流程可能会导致开发成本的增加以及业务复杂度的上升。在这
  • 微信语音大揭秘:为什么禁止转发?

    大家好,我是你们的小米。今天,我要和大家聊一个有趣的话题:为什么微信语音不可以转发?这是一个我们经常在日常使用中遇到的问题,也是一个让很多人好奇的问题。让我们一起来揭开这
  • 重估百度丨大模型,能撑起百度的“今天”吗?

    自象限原创 作者|程心 罗辑2023年之前,对于自己的“今天”,百度也很迷茫。“新业务到 2022 年底还是 0,希望 2023 年出来一个 1。”这是2022年底,李彦宏
  • 2纳米决战2025

    集微网报道 从三强争霸到四雄逐鹿,2nm的厮杀声已然隐约传来。无论是老牌劲旅台积电、三星,还是誓言重回先进制程领先地位的英特尔,甚至初成立不久的新
  • iQOO Neo8 Pro评测:旗舰双芯加持 最强性能游戏旗舰

    【Techweb评测】去年10月,iQOO推出了一款Neo7手机,该机搭载了联发科天玑9000+,配备独显芯片Pro+,带来了同价位段最佳的游戏体验,一经上市便受到了诸多用
  • 引领旗舰级影像能力向中端机普及 OPPO K11 系列发布 1799 元起

    7月25日,OPPO正式发布K系列新品—— OPPO K11 。此次 K11 在中端手机市场长期被忽视的影像板块发力,突破性地搭载索尼 IMX890 旗舰大底主摄,支持 OIS
  • DRAM存储器10月价格下跌,NAND闪存本月价格与上月持平

    10月30日,据韩国媒体消息,自今年年初以来一直在上涨的 DRAM 存储器的交易价格仅在本月就下跌了近 10%,此次是全年首次降价,而NAND 闪存本月价格与上月持平。市
Top