推薦:Linux啟動Java程序jar包Shell腳本

2022-01-01 IT大咖說


每次啟動Java程序jar包的時候,難道你還在手敲java -jar xxserver.jar……?邊敲邊想著都需要追加哪些參數?

今天就推薦給大家一個幾乎通用的Shell腳本,它支持Java程序Jar包的服務啟動、服務停止、服務狀態查看,同時在腳本中追加了一些語法說明,具體Shell命令,還請大家自行上網學習。

#!/bin/sh

# 該腳本為Linux下啟動java程序的腳本
#
# author: luandy
# date: 2021/1/15
#
# 特別注意:
# 該腳本使用系統kill命令來強制終止指定的java程序進程。
# 所以在殺死進程前,可能會造成數據丟失或數據不完整。如果必須要考慮到這類情況,則需要改寫此腳本,
#
#
# 根據實際情況來修改以下配置信息 ##################################

# JAVA應用程式的名稱
APP_NAME=uid-consumer
# JAVA應用程式埠號
SERVER_PORT=9999
# jar包存放路徑
JAR_PATH='/app/uid-consumer'
# jar包名稱
JAR_NAME=uid-consumer-1.1.0-SNAPSHOT.jar
# PID 代表是PID文件
JAR_PID=$JAR_NAME\.pid
# 日誌輸出文件
LOG_FILE=logs

# java虛擬機啟動參數
JAVA_OPTS="-Xms512m -Xmx512m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1024m -XX:ParallelGCThreads=4 -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=utf-8"

# 根據實際情況來修改以上配置信息 ##################################


# 檢查程序是否處於運行狀態
is_exist() {
# 查詢出應用服務的進程id,grep -v 是反向查詢的意思,查找除了grep操作的run.jar的進程之外的所有進程
pid=`ps -ef|grep $JAR_NAME|grep -v grep|awk '{print $2}' `

# [ ]表示條件測試。注意這裡的空格很重要。要注意在'['後面和']'前面都必須要有空格
# [ -z STRING ] 如果STRING的長度為零則返回為真,即空是真
# 如果不存在返回0,存在返回1
if [ -z "${pid}" ]; then
return 0
else
return 1
fi
}

# ######### Shell腳本中$0、$?、$!、$$、$*、$#、$@等的說明 #########

# $$ Shell本身的PID(ProcessID,即腳本運行的當前 進程ID號)
# $! Shell最後運行的後臺Process的PID(後臺運行的最後一個進程的 進程ID號)
# $? 最後運行的命令的結束代碼(返回值)即執行上一個指令的返回值 (顯示最後命令的退出狀態。0表示沒有錯誤,其他任何值表明有錯誤)
# $- 顯示shell使用的當前選項,與set命令功能相同
# $* 所有參數列表。如"$*"用「"」括起來的情況、以"$1 $2 … $n"的形式輸出所有參數,此選項參數可超過9個。
# $@ 所有參數列表。如"$@"用「"」括起來的情況、以"$1" "$2" … "$n" 的形式輸出所有參數。
# $# 添加到Shell的參數個數
# $0 Shell本身的文件名
# $1~$n 添加到Shell的各參數值。$1是第1參數、$2是第2參數…。

# 服務啟動方法
start() {
is_exist
if [ $? -eq "1" ]; then
echo "$APP_NAME is already running pid is ${pid}"
else
# jar服務啟動腳本
nohup java $JAVA_OPTS -Xloggc:$LOG_FILE/gc/gclog.log -XX:HeapDumpPath=$LOG_FILE/gc/HeapDump.hprof -jar $JAR_PATH/$JAR_NAME >./$LOG_FILE/run.log 2>&1 &
echo $! > $JAR_PID
echo "start $APP_NAME successed pid is $! "
tail -1000f $LOG_FILE/run.log
fi
}

# 服務停止方法
stop() {
# is_exist
pidf=$(cat $JAR_PID)
# echo "$pidf"
echo "pid = $pidf begin kill $pidf"
kill $pidf
rm -rf $JAR_PID
sleep 2
# 判斷服務進程是否存在
is_exist
if [ $? -eq "1" ]; then
echo "pid = $pid begin kill -9 $pid"
kill -9 $pid
sleep 2
echo "$APP_NAME process stopped!"
else
echo "$APP_NAME is not running!"
fi
}

# 服務運行狀態查看方法
status() {
is_exist
if [ $? -eq "1" ]; then
echo "$APP_NAME is running,pid is ${pid}"
else
echo "$APP_NAME is not running!"
fi
}

# 重啟服務方法
restart() {
# 調用服務停止命令
stop
# 調用服務啟動命令
start
}

# 幫助說明,用於提示輸入參數信息
usage() {
echo "Usage: sh run-service.sh [ start | stop | restart | status ]"
exit 1
}

###################################
# 讀取腳本的第一個參數($1),進行判斷
# 參數取值範圍:{ start | stop | restart | status }
# 如參數不在指定範圍之內,則列印幫助信息
###################################
#根據輸入參數,選擇執行對應方法,不輸入則執行使用說明
case "$1" in
'start')
start
;;
'stop')
stop
;;
'restart')
restart
;;
'status')
status
;;
*)
usage
;;
esac
exit 0

來源:

https://www.toutiao.com/i6917650637664780808/

「IT大咖說」歡迎廣大技術人員投稿,投稿郵箱:aliang@itdks.com


 IT大咖說  |  關於版權 

由「IT大咖說(ID:itdakashuo)」原創的文章,轉載時請註明作者、出處及微信公眾號。投稿、約稿、轉載請加微信:ITDKS10(備註:投稿),茉莉小姐姐會及時與您聯繫!

感謝您對IT大咖說的熱心支持!

相關焦點

  • 實現一個啟動多個jar或多個服務的腳本
    如果出現linux中的服務宕機時,需要將一個一個的腳本啟動起來,比較麻煩。
  • Linux平臺下啟動java程序的腳本編寫
    Java在window下的腳本很多人都會,因為大家都在window平臺下開發。但是一旦上生產系統就要會更換到Linux平臺下。畢竟java是跨平臺的嗎?可是,程序是跨平臺的,啟動腳本卻是和系統平臺緊密相關的。
  • 玩轉Linux - shell 編程基礎(一)
    shell腳本(shell script),是一種為shell編寫的腳本程序。業界所說的shell通常都是指shell腳本,但讀者朋友要知道,shell和shell script是兩個不同的概念。由於習慣的原因,簡潔起見,本文出現的「shell編程」都是指shell腳本編程,不是指開發shell自身(如Windows Explorer擴展開發)。
  • 構建shell腳本一文就夠
    bedtools multicov -bams  $bam -bed $bed |perl -alne '{$len=$F[2]-$F[1];if($len <1 ){print "$./bin/bash# This script displays the date and who's logged on管道的強大之處在於可以根據自己的需求靈活地組合和使用各種linux命令工具。這裡只是一個簡單的例子,要熟練掌握少不了平時多多研究和練習。
  • Linux——Shell腳本的應用1(基礎)
    Shell腳本的應用(基礎)簡介:隨著linux系統在企業中的應用越來越多,伺服器的自動化管理也變得越來越重要。在linux伺服器的自動化維護工作中,除了計劃任務的設置以外,shell腳本的應用也是非常重要的一部分。
  • Linux命令行與Shell腳本編程學習筆記20
    trap命令允許你來指定shell腳本要觀察哪些linux信號並從shell中攔截。如果腳本收到了trap命令中列出的信號,它會阻止它被shell處理,而在本地處理它。2. trap命令的格式是: trap commands signals3. 當&符放到命令後時,它會將命令和bash shell分離開來,並將它作為系統上的獨立後臺進程運行。
  • shell-安裝jdk腳本
    前言在Linux安裝jdk是很簡單的事情,那就讓shell腳本去做吧!安裝到oracle官網的歸檔網址下載需要的jdk壓縮包,並放到腳本所在的目錄,然後cd到腳本目錄執行就可以,這裡是1.8.172版本為例:http://www.oracle.com/technetwork/java/archive-139210.html#!
  • Linux常用Shell腳本,值得學習及收藏
    在運維中,尤其是linux運維,都知道腳本的重要性,腳本會讓我們的 運維事半功倍,所以學會寫腳本是我們每個linux運維必須學會的一門功課,這裡收藏
  • Linux常用Shell腳本知多少
    在運維中,尤其是linux運維,都知道腳本的重要性,腳本會讓我們的 運維事半功倍,所以學會寫腳本是我們每個linux運維必須學會的一門功課,這裡收藏linux運維常用的腳本。如何學好腳本,最關鍵的是就是大量的練習 和實踐。根據以下腳本我們可以拓展,這樣我們提高的很快!舉一反三!小夥伴要是不熟悉linux的話可以在公眾號內回復 「linux」 獲取linux的教程 之後咱們再來回過頭來學一學腳本1.用Shell編程,判斷一文件是不是字符設備文件,如果是將其拷貝到 /dev 目錄下。
  • 編寫Linux Shell腳本的最佳實踐
    畢竟shell腳本這個東西不算是正經的程式語言,他更像是一個工具,用來雜糅不同的程序供我們調用。因此很多人在寫的時候也是想到哪裡寫到哪裡,基本上都像是一段超長的main函數,不忍直視。同時,由於歷史原因,shell有很多不同的版本,而且也有很多有相同功能的命令需要我們進行取捨,以至於代碼的規範很難統一。
  • SpringBoot2.x基礎篇:Linux後臺運行Jar以及Jvm參數調優
    我們將編寫的應用程式打包為Jar可執行文件後,如果在Linux伺服器環境下,可直接使用java -jar xxx.jar命令運行應用程式,不過當我們關閉命令窗口後啟動中的應用程式也會停止,那我們需要通過什麼方式才可以成為後臺服務方式運行呢?
  • Linux中Shell腳本基礎筆記
    shell腳本都是以"#!"作為開頭。這是腳本開始的標記,它是告訴linux系統執行該腳本文件需要使用相應的解釋器,緊挨著的/bin/bash指定了解釋器的具體路徑。shell主要用#作為注釋標記。後面可以加腳本的注釋,建議寫shell腳本要根據情況多寫注釋,便於以後腳本的維護。shell腳本的運行方式:1、可以在shell腳本第一行加上"#!/bin/bash"的話。可以按照以下方式執行:bash test.sh #要保證目錄中存在該腳本文件。2、給腳本加上可執行的權限,然後使用".
  • shell腳本極簡教程
    沒有一個大公司不要求linux的基本技能的,只是不同崗位要求掌握的程度不同。Shell本身是一個用C語言編寫的程序,它是用戶使用Unix/Linux的橋梁,用戶的大部分工作都是通過Shell完成的。Shell既是一種命令語言,又是一種程序設計語言。
  • 為什麼Shell腳本執行不成功?原來是這樣
    Shell腳本語言是linux系統中內置的一門非常強大的語言,非常善於處理作業系統層面的應用,我們從網上下載的很多應用的安裝和啟動往往都是用Shell腳本語言寫的。可是初步開始使用linux的小夥伴是不是經常會有些應用下載下來,不知道怎麼安裝或者啟動,甚至有的根據作者的安裝說明都操作錯誤。
  • Linux中編寫Shell腳本
    當命令或程序語句不在命令行下執行,而是通過一個程序文件來執行時,該程序文件就被稱為Shell腳本。在Shell腳本裡內置了很多命令、語句及循環控制,然後將這些命令一次性執行完畢,這種通過文件執行腳本的方式稱為非交互的方式。
  • Linux作業系統之Shell程序設計
    上例中腳本hllo放在當前目錄下,所以要用.hello來運行。(2)啟動一一個Shell子進程來執行腳本文件: $ bash hello #或bash < hello 執行此命令行時,Shell 進程先啟動一個bash子進程,讓它執行hello腳本的內容,執行完畢後bash子進程也終止。在這種方式中,腳本是作為命令參數傳給子Shell 的。
  • 平常寫shell腳本遇到的問題匯總
    最近也是在linux下寫了很多的shell腳本,之前也自己總結過遇到的一些問題及解決方法,最近又遇到並且整理了一下,下面簡單說下最近遇到的問題以及解決方法。."[: too many arguments"錯誤問題:最近在寫 shell腳本的時候發現了這樣一個問題:PID=`cat ****`while [ !
  • 不懂什麼是shell腳本?看完本文你一定就懂了
    基本結構最底下是計算機硬體,然後硬體被系統核心包住,在系統核心外層的就是shell,然後shell外層的就是我們最容易理解的應用程式,我們平時接觸最多的就是應用程式了。看圖可知:shell其實是一個命令解釋器,它的作用是解釋用戶輸入的命令和程序,命令和程序可以理解成我們圖中的應用程式,我們linux系統中的那些命令其實也都是一個個的小程序,只不過完成的是系統的應用功能。我們在系統的終端中輸入一條命令,可以立馬看到一條或者幾條系統回復我們的信息,其實就是shell在幫我們回復,所以shell可以稱之為命令解釋器。
  • linux shell 腳本入門
    Linux 腳本編寫基礎1.1 語法基本介紹1.1.1 開頭程序必須以下面的行開始(必須方在文件的第一行):#!/bin/sh符號#!用來告訴系統它後面的參數是用來執行該文件的程序。在這個例子中我們使用/bin/sh來執行程序。當編輯好腳本時,如果要執行該腳本,還必須使其可執行。
  • 【Linux】shell高級編程視頻教程(含經典案例)
    1.什麼是shell?      shell是你(用戶)和Linux(或者更準確的說,是你和Linux內核)之間的接口程序。你在提示符下輸入的每個命令都由shell先解釋然後傳給Linux內核。     shell的最強大的重要特性是它自身就是一個解釋型的程序設計語言,shell 程序設計語言支持在高級語言裡所能見到的絕大多數程序控制結構,比如循環,函數,變量和數組。shell 程式語言很易學,並且一旦掌握後它將成為你的得力工具。任何在提示符下能鍵入的命令都能放到一個可執行的shell程序裡,這意味著用shell語言能簡單地重複執行某一任務。