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


prtyaa
prtyaa 2024-01-06 22:39:55 68973 赞同 0 反对 0
分类: 资源 标签: 运维
我们都知道,在开发的过程中,有很多部署自己微服务的方式,其中有各种各样的不同操作,比如使用 docker 打包为镜像的方式,还有基础使用 jar 包的方式进行部署,但是呢?使用 jar 包部署,那就离不开这个启动 jar 包的脚本命令,总不能每次都是直接自己手动杀端口,然后再重新启动吧,今天了不起来带大家看一下这个 Shell 脚本,并且写一个 Shell 脚本通用给大家,拿来可用。

如果想直接拿这个脚本改一下用的,不想看这个基础内容的,可以直接拉到最后了。

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

echo $SHELL

输出:/bin/bash

2.查看系统支持的Shell

cat /etc/shells

输出:

/bin/sh /bin/bash /usr/bin/sh /usr/bin/bash

也就是说,我们的云服务器是支持我们在这里给他安排 Shell 脚本的

我们这时候先来安排一下 sh 的文件,创建一个文件夹,然后在其中创建一个 sh 的文件。

mkdir /usr/local/shelltest

touch test.sh

创建完成我们编辑一下内容

vim test.sh

#!/bin/bash
echo "Hello World Shell"

然后我们出来运行一下我们的 Shell 的第一个脚本

bash test.sh

出来的结果是 Hello World Shell.

我们知道其实 Shell脚本没那么复杂,一个启动 jar 包的启动,可能用到的用法就一些,我们来看一下另外的几个必备的语法

if

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

接下来我们看一段脚本,来根据脚本分析

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 方法,方法体的内容则是花括号内的内容。

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

这个命令更不用多说了,那直接就是用来查询应用的端口号的,后面跟着我们的jar_name 实际上就是一个变量,直接获取的我们在方法外面定义的

后面的awk其实就相当于是信息的读入

也就是说,我们在执行 sh start.sh start 的方法的时候,然后会读取我们接下来输入的内容,接下来就进入了判断环节。

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的标志了。

看完了我们的启动命令,接下来就得看我们的停止命令了。

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已关闭

我们再来看一个重启的方法:

restart() {
  stop

  sleep 2
  echo "停止完成,准备启动jar包"
  start
}

这个更不用说了,我们写了 start 和 stop  只要在这个 restart里面去执行一下这个 stop 然后等待一会,然后再启动就完事了。

完整的脚本如下

#替换成你的jar包
jar_name=cloud-ui-zhiyikeji.jar
jar_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:$PATH
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 ""
}

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包了。

如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!

评价 0 条
prtyaaL1
粉丝 1 资源 1949 + 关注 私信
最近热门资源
国产操作系统环境搭建(内含镜像资源链接和提取码)  89
银河麒麟桌面操作系统V10SP1-2403-update1版本中,通过“麒麟管家-设备管理-硬件信息-硬盘”查看硬盘类型时,显示的是HDD(机械硬盘),而实际上该笔记本的硬盘类型为SSD  88
分享几个在日常办公中可以用到的shell脚本  81
以openkylin为例编译安装内核  79
bat脚本生成查看电脑配置\硬件信息  78
常见系统问题及其解决方法  77
分享解决宏碁电脑关机时自动重启的方法  75
统信uosboot区分未挂载导致更新备份失败  69
分享如何解决报错:归档 xxx.deb 对成员 control.tar.zst 使用了未知的压缩,放弃操作  69
统信uos安装mysql的实例参考  63
最近下载排行榜
国产操作系统环境搭建(内含镜像资源链接和提取码) 0
银河麒麟桌面操作系统V10SP1-2403-update1版本中,通过“麒麟管家-设备管理-硬件信息-硬盘”查看硬盘类型时,显示的是HDD(机械硬盘),而实际上该笔记本的硬盘类型为SSD 0
分享几个在日常办公中可以用到的shell脚本 0
以openkylin为例编译安装内核 0
bat脚本生成查看电脑配置\硬件信息 0
常见系统问题及其解决方法 0
分享解决宏碁电脑关机时自动重启的方法 0
统信uosboot区分未挂载导致更新备份失败 0
分享如何解决报错:归档 xxx.deb 对成员 control.tar.zst 使用了未知的压缩,放弃操作 0
统信uos安装mysql的实例参考 0
作者收入月榜
1

prtyaa 收益401.13元

2

zlj141319 收益237.91元

3

哆啦漫漫喵 收益231.75元

4

IT-feng 收益219.92元

5

1843880570 收益214.2元

6

风晓 收益208.24元

7

777 收益173.17元

8

Fhawking 收益106.6元

9

信创来了 收益106.03元

10

克里斯蒂亚诺诺 收益91.08元

请使用微信扫码

添加我为好友,拉您入交流群!

请使用微信扫一扫!