自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

手把手教你寫一個Shell腳本部署你的服務(wù)

開發(fā) 前端
nohup 這個命令的標(biāo)識則是我們使用后臺啟動的方式,不必再關(guān)注如果執(zhí)行jar -jar 的時候,我們關(guān)閉了當(dāng)前的窗口,結(jié)果我們的服務(wù)就被迫終止了,而后面,我們還貼心的又查詢了一下這個服務(wù),然后把我們的服務(wù)是否啟動成功給大家展示出來,如果運(yùn)行之后,就會出現(xiàn) 應(yīng)用xxx啟動成功,pid = xxxxx的標(biāo)志了。

我們都知道,在開發(fā)的過程中,有很多部署自己微服務(wù)的方式,其中有各種各樣的不同操作,比如使用 docker 打包為鏡像的方式,還有基礎(chǔ)使用 jar 包的方式進(jìn)行部署,但是呢?使用 jar 包部署,那就離不開這個啟動 jar 包的腳本命令,總不能每次都是直接自己手動殺端口,然后再重新啟動吧,今天了不起來帶大家看一下這個 Shell 腳本,并且寫一個 Shell 腳本通用給大家,拿來可用。

如果想直接拿這個腳本改一下用的,不想看這個基礎(chǔ)內(nèi)容的,可以直接拉到最后了。

1.查看自己當(dāng)前系統(tǒng)默認(rèn)的 Shell

echo $SHELL

輸出:/bin/bash

2.查看系統(tǒng)支持的Shell

cat /etc/shells

輸出:

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

也就是說,我們的云服務(wù)器是支持我們在這里給他安排 Shell 腳本的

我們這時候先來安排一下 sh 的文件,創(chuàng)建一個文件夾,然后在其中創(chuàng)建一個 sh 的文件。

mkdir /usr/local/shelltest

touch test.sh

創(chuàng)建完成我們編輯一下內(nèi)容

vim test.sh

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

然后我們出來運(yùn)行一下我們的 Shell 的第一個腳本

bash test.sh

出來的結(jié)果是 Hello World Shell.

我們知道其實(shí) Shell腳本沒那么復(fù)雜,一個啟動 jar 包的啟動,可能用到的用法就一些,我們來看一下另外的幾個必備的語法

if

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

接下來我們看一段腳本,來根據(jù)腳本分析

start() {
  echo ""
  pid=$(ps -ef | grep $jar_name | grep -v grep | awk '{print $2}')
  if [ -z $pid ]; then
    cd $jar_path  # 這里轉(zhuǎn)到j(luò)ar包目錄執(zhí)行命令,是為了使用jar_path下的config文件,貌似java程序只能識別當(dāng)前執(zhí)行命令目錄下的配置,否則就是使用已打入Jar包的配置文件。
    nohup java -jar $jar_name >$log_path 2>&1 &
    pid=$(ps -ef | grep $jar_name | grep -v grep | awk '{print $2}')
    echo "應(yīng)用 ${jar_name}啟動成功,pid=${pid}"
    # tail -f $log_path
 
  else
    echo "應(yīng)用 ${jar_name} 正在運(yùn)行,pid = ${pid}"
  fi
  echo ""
}

start() 顧名思義,這明顯就是一個 start 方法,方法體的內(nèi)容則是花括號內(nèi)的內(nèi)容。

echo 我們都知道了,就是輸出個內(nèi)容
ps -ef | grep

這個命令更不用多說了,那直接就是用來查詢應(yīng)用的端口號的,后面跟著我們的jar_name 實(shí)際上就是一個變量,直接獲取的我們在方法外面定義的

后面的awk其實(shí)就相當(dāng)于是信息的讀入

也就是說,我們在執(zhí)行 sh start.sh start 的方法的時候,然后會讀取我們接下來輸入的內(nèi)容,接下來就進(jìn)入了判斷環(huán)節(jié)。

cd $jar_path  # 這里轉(zhuǎn)到j(luò)ar包目錄執(zhí)行命令,是為了使用jar_path下的config文件,貌似java程序只能識別當(dāng)前執(zhí)行命令目錄下的配置,否則就是使用已打入Jar包的配置文件。
 
nohup java -jar $jar_name >$log_path 2>&1 & 這個則是我們最重要的啟動Jar包的版本

nohup 這個命令的標(biāo)識則是我們使用后臺啟動的方式,不必再關(guān)注如果執(zhí)行jar -jar 的時候,我們關(guān)閉了當(dāng)前的窗口,結(jié)果我們的服務(wù)就被迫終止了,而后面,我們還貼心的又查詢了一下這個服務(wù),然后把我們的服務(wù)是否啟動成功給大家展示出來,如果運(yùn)行之后,就會出現(xiàn) 應(yīng)用xxx啟動成功,pid = xxxxx的標(biāo)志了。

看完了我們的啟動命令,接下來就得看我們的停止命令了。

stop() {
  echo ""
  pid=$(ps -ef | grep $jar_name | grep -v grep | awk '{print $2}')
  if [ -z $pid ]; then # -z 是判斷是否為空
    echo "${jar_name}未運(yùn)行!"
  else
    echo "準(zhǔn)備關(guān)閉進(jìn)程$pid"
    kill -9 $pid
    sleep 0.5
    echo "${jar_name}已關(guān)閉!"
  fi
  echo ""
}

這個stop的方法幾句比較簡單了,接受收入內(nèi)容,然后判斷這個 jar 包是否在運(yùn)行當(dāng)中,如果運(yùn)行的話,那么找到這個端口,然后關(guān)閉到這個進(jìn)程號,最后給我們輸出一個 xxxx已關(guān)閉

我們再來看一個重啟的方法:

restart() {
  stop

  sleep 2
  echo "停止完成,準(zhǔn)備啟動jar包"
  start
}

這個更不用說了,我們寫了 start 和 stop  只要在這個 restart里面去執(zhí)行一下這個 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}未運(yùn)行!"
  else
    echo "準(zhǔn)備關(guān)閉進(jìn)程$pid"
    kill -9 $pid
    sleep 0.5
    echo "${jar_name}已關(guān)閉!"
  fi
  echo ""
}

start() {
  echo ""
  pid=$(ps -ef | grep $jar_name | grep -v grep | awk '{print $2}')
  if [ -z $pid ]; then
    cd $jar_path  # 這里轉(zhuǎn)到j(luò)ar包目錄執(zhí)行命令,是為了使用jar_path下的config文件,貌似java程序只能識別當(dāng)前執(zhí)行命令目錄下的配置,否則就是使用已打入Jar包的配置文件。
    nohup java -jar $jar_name >$log_path 2>&1 &
    pid=$(ps -ef | grep $jar_name | grep -v grep | awk '{print $2}')
    echo "應(yīng)用 ${jar_name}啟動成功,pid=${pid}"
    # tail -f $log_path
 
  else
    echo "應(yīng)用 ${jar_name} 正在運(yùn)行,pid = ${pid}"
  fi
  echo ""
}

status() {
  echo ""
  pid=$(ps -ef | grep $jar_name | grep -v grep | awk '{print $2}')
  if [ -z $pid ]; then
    echo "應(yīng)用 ${jar_name} 未運(yùn)行"
  else
    echo "應(yīng)用 ${jar_name} 正在運(yùn)行,pid = ${pid}"
  fi
  echo ""

}
restart() {
  stop

  sleep 2
  echo "停止完成,準(zhǔn)備啟動jar包"
  start
}
action() {
  echo "請輸入數(shù)字選擇要執(zhí)行的操作:1=啟動,2=重啟,3=停止,4=查看運(yùn)行狀態(tài),5=退出"
  echo '你輸入的數(shù)字為:'
  read a
  case $a in
  "1")
    start
    ;;
  "2")
    restart
    ;;
  "3")
    stop
    ;;
  "4")
    status
    ;;
  "5")
    exit 1
    ;;
  *)
    echo "輸入錯誤,請重新輸入"
    action
    ;;
  esac
}
action

腳本奉上,我們需要做的就是更改一下前面的jar包的路徑已經(jīng)jar包的相關(guān)內(nèi)容即可實(shí)現(xiàn)shell腳本來啟動自己的jar包了。

你學(xué)會了么?

責(zé)任編輯:武曉燕 來源: Java極客技術(shù)
相關(guān)推薦

2021-06-22 10:43:03

Webpack loader plugin

2019-08-26 09:25:23

RedisJavaLinux

2021-08-31 10:02:10

KubernetesLinux集群

2022-05-18 08:51:44

調(diào)用模板后端并行

2023-03-27 08:28:57

spring代碼,starter

2023-03-22 09:00:38

2022-09-22 12:38:46

antd form組件代碼

2022-06-28 15:29:56

Python編程語言計(jì)時器

2023-12-06 08:28:44

禮物系統(tǒng)用例圖

2014-01-22 09:19:57

JavaScript引擎

2020-12-23 09:48:37

數(shù)據(jù)工具技術(shù)

2017-07-19 13:27:44

前端Javascript模板引擎

2018-11-22 09:17:21

消息推送系統(tǒng)

2022-08-26 08:01:38

DashWebJavaScrip

2016-11-01 09:46:04

2017-11-27 15:17:24

PythonMonkey腳本

2022-10-30 10:31:42

i2ccpuftrace

2021-07-14 09:00:00

JavaFX開發(fā)應(yīng)用

2020-06-17 07:35:57

虛擬機(jī)部署微服務(wù)

2011-01-10 14:41:26

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號