Linux上编写启动和停止Java程序的Shell脚本

  • A+
所属分类:Linux

Linux上的启动、停止应用程序的shell脚本编写

在日常运维工作中,都会有启动、停止、查看应用状态的需求,我们在生产环境中编写好自动化启停应用的shell脚本,一方面,可以为了提高工作效率,另一方面,降低运维工作的成本和失败率。

总结一套启停应用服务的通用shell脚本

#!/bin/bash
#导入jdk环境变量
export JAVA_HOME=/etc/alternatives/jre_1.8.0_openjdk
ulimit -c unlimited

#应用目录
APP_HOME=/home/admin/yuelu-book
#应用名称
APP_NAME=yuelu-book

#Java启动时JVM参数设置
JAVA_OPTS="-server"
JAVA_OPTS="${JAVA_OPTS} -Xms4g -Xmx4g"
JAVA_OPTS="${JAVA_OPTS} -Xmn2g"
JAVA_OPTS="${JAVA_OPTS} -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m"
JAVA_OPTS="${JAVA_OPTS} -XX:MaxDirectMemorySize=1g"
JAVA_OPTS="${JAVA_OPTS} -XX:SurvivorRatio=10"
JAVA_OPTS="${JAVA_OPTS} -XX:+UseConcMarkSweepGC -XX:CMSMaxAbortablePrecleanTime=5000"
JAVA_OPTS="${JAVA_OPTS} -XX:+CMSClassUnloadingEnabled -XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSInitiatingOccupancyOnly"
JAVA_OPTS="${JAVA_OPTS} -XX:+ExplicitGCInvokesConcurrent -Dsun.rmi.dgc.server.gcInterval=2592000000 -Dsun.rmi.dgc.client.gcInterval=2592000000"
JAVA_OPTS="${JAVA_OPTS} -XX:ParallelGCThreads=4"
JAVA_OPTS="${JAVA_OPTS} -Xloggc:${APP_HOME}/logs/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps"
JAVA_OPTS="${JAVA_OPTS} -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${APP_HOME}/java.hprof"
JAVA_OPTS="${JAVA_OPTS} -Djava.awt.headless=true"
JAVA_OPTS="${JAVA_OPTS} -Dsun.net.client.defaultConnectTimeout=10000"
JAVA_OPTS="${JAVA_OPTS} -Dsun.net.client.defaultReadTimeout=30000"
JAVA_OPTS="${JAVA_OPTS} -Dfile.encoding=UTF-8"
JAVA_OPTS="${JAVA_OPTS} -Dproject.name=$APP_NAME"
#导入JAVA参数设置
export JAVA_OPTS

#使用说明,用来提示输入参数,如果输出其他不相关的命令,会提示正确命令
usage() {
    #使用具体命令 例如 sh core.sh start 启动应用程序
    echo "Usage: sh core.sh [start|stop|restart|status]"
    exit 1
}

#检查程序是否在运行
is_exist(){
  #查看具体应用的进程号,并且进行记录 grep -v grep 过滤grep
  pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}'`
  #如果不存在返回1,存在返回0
  if [ -z "${pid}" ]; then
   return 1
  else
    return 0
  fi
}

#启动方法
start(){
  #调用检查应用方法
  is_exist
  if [ $? -eq 0 ]; then
    echo "${APP_NAME} is already running. pid=${pid}"
  else
     #启动Java应用,如果需要后台运行则使用 nohup
     $JAVA_HOME/bin/java -jar $JAVA_OPTS $APP_HOME/target/$APP_NAME.jar &
  fi
}

#停止方法
stop(){
  is_exist
  if [ $? -eq "0" ]; then
    #杀死进程
    kill -9 $pid
    echo "${APP_NAME} is stop"
  else
    echo "${APP_NAME} is not running"
  fi
}

#输出运行状态
status(){
  is_exist
  if [ $? -eq "0" ]; then
    echo "${APP_NAME} is running. Pid is ${pid}"
  else
    echo "${APP_NAME} is not running."
  fi
}

#重启
restart(){
  stop
  sleep 5
  start
}

#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
  "start")
    start
    ;;
  "stop")
    stop
    ;;
  "status")
    status
    ;;
  "restart")
    restart
    ;;
  *)
    usage
    ;;
esac
  • 我的微信
  • 加好友一起交流!
  • weinxin
  • 微信公众号
  • 关注公众号获取分享资源!
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: