SpringBoot纵横的时代,Jar包的启动与停止挺常用了,推荐一个通用脚本
脚本源码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 #!/bin/bash JDK_HOME="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el7_7.x86_64/bin/java" VM_OPTS="-Xms2048m -Xmx2048m" SPB_OPTS="--spring.profiles.active=dev" APP_LOCATION="/data/shell/app.jar" APP_NAME="app" PID_CMD="ps -ef |grep $APP_NAME |grep -v grep |awk '{print \$2}'" start () { echo "=============================start==============================" PID=$(eval $PID_CMD ) if [[ -n $PID ]]; then echo "$APP_NAME is already running,PID is $PID " else nohup $JDK_HOME $VM_OPTS -jar $APP_LOCATION $SPB_OPTS >/dev/null 2>\$1 & echo "nohup $JDK_HOME $VM_OPTS -jar $APP_LOCATION $SPB_OPTS >/dev/null 2>\$1 &" PID=$(eval $PID_CMD ) if [[ -n $PID ]]; then echo "Start $APP_NAME successfully,PID is $PID " else echo "Failed to start $APP_NAME !!!" fi fi echo "=============================start==============================" } stop () { echo "=============================stop==============================" PID=$(eval $PID_CMD ) if [[ -n $PID ]]; then kill -15 $PID sleep 5 PID=$(eval $PID_CMD ) if [[ -n $PID ]]; then echo "Stop $APP_NAME failed by kill -15 $PID ,begin to kill -9 $PID " kill -9 $PID sleep 2 echo "Stop $APP_NAME successfully by kill -9 $PID " else echo "Stop $APP_NAME successfully by kill -15 $PID " fi else echo "$APP_NAME is not running!!!" fi echo "=============================stop==============================" } restart () { echo "=============================restart==============================" stop start echo "=============================restart==============================" } status () { echo "=============================status==============================" PID=$(eval $PID_CMD ) if [[ -n $PID ]]; then echo "$APP_NAME is running,PID is $PID " else echo "$APP_NAME is not running!!!" fi echo "=============================status==============================" } info () { echo "=============================info==============================" echo "APP_LOCATION: $APP_LOCATION " echo "APP_NAME: $APP_NAME " echo "JDK_HOME: $JDK_HOME " echo "VM_OPTS: $VM_OPTS " echo "SPB_OPTS: $SPB_OPTS " echo "=============================info==============================" } help () { echo "start: start server" echo "stop: shutdown server" echo "restart: restart server" echo "status: display status of server" echo "info: display info of server" echo "help: help info" } case $1 in start) start ;; stop) stop ;; restart) restart ;; status) status ;; info) info ;; help ) help ;; *) help ;; esac exit $?
说明
需要先修改bash脚本中定义的变量
JDK_HOME: JDK安装目录
VM_OPTS: Java vm参数
SPB_OPTS: 项目参数
APP_LOCATION: Jar包路径
APP_NAME:应用名,用于提示查找进程,一般为jar包名称
小技巧
vim粘贴时可以使用:set paste
命令解决自动对齐造成的脚本紊乱