springboot的jar包啓動進程,停止進程的shell腳本

有時候我們會手動去啓動一個springbootjar包,但是如果我們想停止這個進程時只能ps去找到這個進程,然後手動的去kill掉,這時如果這個服務器上有很多進程,這樣就有可能會kill錯了進程,把別人或者其他重要的進程殺掉了,這樣就會造成不好的後果.所以我寫了個啓動和停止腳本.通過啓動腳本啓動後,會把進程的pid存到腳本執行目錄的pid文件中,當你要kill這個進程時,只要在這個目錄執行停止腳本的shell即可,它會從pid文件中取到pid,從而保證不會殺錯進程.

啓動腳本:

 

#! /bin/bash
serverName=$1  # 傳入的變量  要啓動的jar包名稱
remotePort=$2  # 若以debug方式啓動 需要傳入的端口號,否則可以不傳


        if [ $serverName ]; then  # 判斷是否爲空,不爲空,返回true 
          echo "serverName=${serverName}"
        else
          echo "請輸入jar包沒名稱"
          exit;
        fi

        pid_file="pid"  #啓動jar包後 pid存放的文件名稱,默認存在shell執行的同級目錄
        cpid="-1"  # 默認爲-1,表示不存在此文件

        if [ -e $pid_file ]; then   # 判斷文件是否存在,存在返回true
                if [ -s $pid_file ];  then   #判斷文件是否爲空(長度爲0) ,不爲空返回true
                   cpid=$(cat pid)
                else
                   cpid="-2" #表示爲空文件
                fi
        fi

      #  echo "cpid=${cpid}"
threshold_pid=0  # pid 閾值,shell執行後獲取到的pid會與此比較 若文件不存在或文件爲空,獲取到的cpid都會小於此值,jar包會正常啓動.如果因爲人爲刪除或改變文件內容,可能會導致jar包重複啓動,而導致問題
        if [ $cpid -gt $threshold_pid  ]; then  #表示正確獲取到了pid
          oldServer=$(ps -ef|grep ${serverName} |awk {print\$2} |grep ${cpid})
        fi

     #   echo "oldServer=${oldServer}"

        if [ $oldServer ]; then
          echo "程序已經啓動過了"
          exit
        fi

threshold_port=8180
if [[ $remotePort &&  $remotePort -gt $threshold_port ]]; then  # 端口要在8180以上才以debug啓動
  echo "debug方式啓動  port:${remotePort}"
  nohup  java -jar -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=${remotePort} ${serverName} & 
else
  echo "正常啓動" 
  nohup java  -jar  ${serverName} & 
fi

echo "程序啓動的pid=$!寫入到了當前文件夾的${pid_file}中! "
echo -e "\033[31m 請勿手動刪除${pid_file}文件,否則可能會導致重複啓動  \033[0m"
echo "$!" > pid #將上一個後臺進程寫入到pid文件中

#./jdk1.8.0_172/bin/java -jar -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8195  east-content-0.0.1-SNAPSHOT.jar

 

 

停止腳本:

 

#! /bin/bash
cpid=$(cat pid)
echo "pid= ${cpid}"
kill -9 ${cpid}
ps -ef|grep content

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章