編寫通用shell腳本啟動java項目,適用於多數服務,只需修改服務名即可


文件名:service-user.sh

文件內容:

##shell腳本的頭文件必須有
#!/bin/sh

##再次配置java環境變量以防報其他錯誤
## java env
#jdk安裝目錄
export JAVA_HOME=/usr/java/jdk1.8.0_144
export JRE_HOME=$JAVA_HOME/jre

## service name
APP_NAME=user

##服務存放的文件夾
SERVICE_DIR=/service/$APP_NAME
##服務名
SERVICE_NAME=edu-service-$APP_NAME
##jar包的名字
JAR_NAME=$SERVICE_NAME\.jar
##生成進程文件
PID=$SERVICE_NAME\.pid

##進入服務存放的文件夾
cd $SERVICE_DIR

##接收一個從linux控制台輸入的參數 ./service-user.sh start/stop/restart
case "$1" in

##輸入參數為start時啟動項目
start)
##nohup守護進程啟動項目,即使退出了終端項目仍在運行;/dev/null把日志輸入到空即不輸出日志到notout.out,因為項目里面已經有log4j日志了
nohup $JRE_HOME/bin/java -Xms256m -Xmx512m -jar $JAR_NAME >/dev/null 2>&1 &
echo $! > $SERVICE_DIR/$PID
echo "=== start $SERVICE_NAME"
;;

##輸入參數為stop時停止項目
stop)
##殺死進程id即edu-service-user.pid
kill `cat $SERVICE_DIR/$PID`
#刪除進程pid的文件
rm -rf $SERVICE_DIR/$PID
echo "=== stop $SERVICE_NAME"

#等待5s
sleep 5
##
## edu-service-aa.jar
## edu-service-aa-bb.jar
##獲取進程id -w是全匹配,不加-w就是模糊匹配,可能會造成誤殺進程
P_ID=`ps -ef | grep -w "$SERVICE_NAME" | grep -v "grep" | awk '{print $2}'`
#如果進程id為空就提示進程不存在或者已經停止
if [ "$P_ID" == "" ]; then
echo "=== $SERVICE_NAME process not exists or stop success"
##如果進程id不為空就強殺進程
else
echo "=== $SERVICE_NAME process pid is:$P_ID"
echo "=== begin kill $SERVICE_NAME process, pid is:$P_ID"
kill -9 $P_ID
fi
;;

##輸入參數為restart時重啟項目
restart)
$0 stop
sleep 2
$0 start
echo "=== restart $SERVICE_NAME"
;;

##什么都不輸入時重啟項目
*)
## restart 先停止再重啟可以避免進程沖突,因為這樣每次生成的進程id都不一樣
$0 stop
sleep 2
$0 start
;;

esac
exit 0

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM