需求在Linux服務(wù)器上運(yùn)行jar包來啟動(dòng)Java服務(wù)纪铺,使用kill相關(guān)命令關(guān)閉服務(wù),需要用shell腳本實(shí)現(xiàn)搀别,shell腳本支持2個(gè)輸入?yún)?shù)分別控制要執(zhí)行的動(dòng)作和要操作的jar包退个,有了需求我們來看需要什么知識(shí)來支持我們的shell腳本實(shí)現(xiàn)
1湾趾、jar包的運(yùn)行命令
2、如何獲取外部2個(gè)輸入?yún)?shù):只獲取到參數(shù)引申出參數(shù)的傳遞唯鸭,這就用到了變量定義
3须蜗、shell腳本的流程控制:引申出了條件控制語句,if 或者 case
4目溉、函數(shù)實(shí)現(xiàn)服務(wù)的開啟和關(guān)閉明肮,引申出函數(shù)的定義和函數(shù)傳值
OK我們已經(jīng)知道了有這些知識(shí)需要掌握,我們來逐一解決這些問題
1缭付、jar包的運(yùn)行命令
這個(gè)簡(jiǎn)單:java -Xms128m -Xmx2048m -jar xxxx.jar &
2柿估、如何獲取2個(gè)輸入?yún)?shù)
比如我們運(yùn)行./xxx.sh 參數(shù)1 參數(shù)2
在shell腳本中是如何獲取的呢?
在shell腳本中分別使用$1和$2表示
還是剛才的例子蛉腌,我們運(yùn)行./xxx.sh start service_a
在xxx.sh中:
#!/bin/sh
cmd=$1
servicename=$2
a和b的值分別是"start"官份,"service_a"
3、流程控制:我們這里介紹case的用法
case $1 in
service_a)
java -Xms128m -Xmx2048m -jar a.jar &
;;
service_b)
java -Xms128m -Xmx2048m -jar b.jar &
;;
exit 1
esac
4烙丛、函數(shù)定義和傳值
要定義2個(gè)函數(shù)start()和stop()作為服務(wù)開啟和關(guān)閉的函數(shù)
start(){
? ? case $1 in
service_a)
java -Xms128m -Xmx2048m -jar a.jar &
;;
service_b)
java -Xms128m -Xmx2048m -jar b.jar &
;;
exit 1
esac
}
stop(){
ps -ef|grep "$1" |grep -v 'grep' |awk '{print $2}'|sudo xargs kill -9
}
case "$cmd" in
start)
start "$servicename"
;;
stop)
stop "$servicename"
;;
restart)
stop
start
;;
*)
printf 'Usage: %s {start|stop}\n' "$prog"
exit 1
;;
esac
OK舅巷,我們的需求都實(shí)現(xiàn)了,shell的基本的使用入門done