我們都知道,在開發的過程中,有很多部署自己微服務的方式,其中有各種各樣的不同操作,比如使用 docker 打包為鏡像的方式,還有基礎使用 jar 包的方式進行部署,但是呢?使用 jar 包部署,那就離不開這個啟動 jar 包的腳本命令,總不能每次都是直接自己手動殺端口,然后再重新啟動吧,今天了不起來帶大家看一下這個 Shell 腳本,并且寫一個 Shell 腳本通用給大家,拿來可用。
如果想直接拿這個腳本改一下用的,不想看這個基礎內容的,可以直接拉到最后了。
輸出:/bin/bash
輸出:
/bin/sh /bin/bash /usr/bin/sh /usr/bin/bash
也就是說,我們的云服務器是支持我們在這里給他安排 Shell 腳本的
我們這時候先來安排一下 sh 的文件,創建一個文件夾,然后在其中創建一個 sh 的文件。
創建完成我們編輯一下內容
#!/bin/bashecho "Hello World Shell"
然后我們出來運行一下我們的 Shell 的第一個腳本
出來的結果是 Hello World Shell.
我們知道其實 Shell腳本沒那么復雜,一個啟動 jar 包的啟動,可能用到的用法就一些,我們來看一下另外的幾個必備的語法
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.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包了。
你學會了么?
本文鏈接:http://www.www897cc.com/showinfo-26-34602-0.html手把手教你寫一個Shell腳本部署你的服務
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com