当前位置: 代码网 > 服务器>服务器>Linux > java应用启动与停止的shell脚本分享

java应用启动与停止的shell脚本分享

2024年05月19日 Linux 我要评论
整体思路基于shell脚本开发3个脚本,分别是jvm启动参数相关的setjvment.sh,主要是jvm启动相关参数配置start.sh,主要是利用java命令启动进程,包含classpath和执行结

整体思路

基于shell脚本开发3个脚本,分别是

  • jvm启动参数相关的setjvment.sh,主要是jvm启动相关参数配置
  • start.sh,主要是利用java命令启动进程,包含classpath和执行结果日志保存相关设置
  • stop.sh,主要是停止java进程,包括优雅停止和强制停止

如果linux没有安装jdk,可使用如下命令安装jdk:

sudo apt update
sudo apt install openjdk-8-jdk

然后在启动的文件.bash_profile中设置环境变量java_home,

#!/bin/sh
export java_home=/usr/lib/jvm/java-8-openjdk-amd64

相关脚本

setjvm

#!/bin/bash

# 设置java堆栈大小
java_opts="$java_opts -xmn512m -xms512m -xmx1024m -xx:metaspacesize=64m -xx:maxmetaspacesize=256m"
java_opts="$java_opts -xx:survivorratio=8 -xx:maxtenuringthreshold=8 -xx:-useadaptivesizepolicy"
# 垃圾收集器设置
java_opts="$java_opts -xx:+useparnewgc -xx:+useconcmarksweepgc -xx:+cmsparallelremarkenabled -xx:cmsinitiatingoccupancyfraction=60"
java_opts="$java_opts -xx:+cmsclassunloadingenabled"
# 打印gc日志
java_opts="$java_opts -xx:+printgcdetails -xx:+printgcdatestamps -xx:+printgctimestamps -xx:+printgcapplicationstoppedtime -xx:+usegclogfilerotation"
java_opts="$java_opts -xx:+printheapatgc -xloggc:$work_home/logs/gc.log -xx:gclogfilesize=1m -xx:numberofgclogfiles=10"
# 打印dump日志
java_opts="$java_opts -xx:+heapdumponoutofmemoryerror -xx:heapdumppath=$work_home/logs"
# 其他设置
java_opts="$java_opts -xx:+disableexplicitgc  -xx:+usefastaccessormethods -xx:-usebiasedlocking"
# 指定随机数生成器的种子源
java_opts="$java_opts -djava.security.egd=file:/dev/urandom"
# 设置java.ext.dirs
java_opts="$java_opts -djava.ext.dirs=$java_home/jre/lib/ext:$work_home/lib"
# 其他环境变量或配置设置
# export other_env_variable=example_value

start

#!/bin/bash

cur="$0"

while [ -h "$cur" ]; do
  ls=$(ls -ld "$cur")
  link=$(expr "$ls" : '.-> (.)$')
  if expr "$link" : '/.*' >/dev/null; then
    cur="$link"
  else
    cur=$(dirname "$cur")/"$link"
  fi
done

cur_dir=$(dirname "$cur")

work_home=$(
  cd "$cur_dir/.." >/dev/null
  pwd
)

if [ -z $java_home ]; then
  echo "plz set java_home env."
  exit 1
fi

if [ -r "$work_home/bin/setenv.sh" ]; then
  . "$work_home/bin/setjvmenv.sh"
fi

classpath=$classpath:$work_home/lib/conf
log_dir="$work_home/logs"

if [ ! -d $log_dir ]; then
  mkdir "$log_dir"
fi

main_class="com.toby.dynamic.data.source.start.pointapplication"
count=`ps -ef|grep java|grep $work_home|grep $main_class|grep -v grep|wc -l`
if [ $count != 0 ]; then
  app_id=`ps -ef|grep java|grep $work_home|grep $main_class|grep -v grep|awk '{print $2}'`
  echo "already running with pid $app_id, start aborted."
else
  echo "use java_home $java_home"
  echo "use work_home $work_home"

  exec $java_home/bin/java $java_opts -cp $classpath \
  -dwork.home=$work_home -djava.io.tmpdir=$work_home \
  $main_class >$log_dir/server.log 2>&1 &

  echo "server started."
fi

stop

#!/bin/bash

prg="$0"
while [ -h "$prg" ]; do
  ls=$(ls -ld "$prg")
  link=$(expr "$ls" : '.-> (.)$')
  if expr "$link" : '/.*' >/dev/null; then
    prg="$link"
  else
    prg=$(dirname "$prg")/"$link"
  fi
done

prgdir=$(dirname "$prg")

work_home=$(
  cd "$prgdir/.." >/dev/null
  pwd
)

main_class="com.toby.dynamic.data.source.start.pointapplication"
count=`ps -ef|grep java|grep $work_home|grep $main_class|grep -v grep|wc -l`
echo " stop server start."
if [ $count == 0 ]; then
  echo "already stop,return."
  exit 0
fi

app_id=`ps -ef|grep java|grep $work_home|grep $main_class|grep -v grep|awk '{print $2}'`
# 请求优雅退出
kill -15 $app_id
sleep=5
stopped=0

while [ $sleep -ge 0 ]; do
  count=`ps -ef|grep java|grep $work_home|grep $main_class|grep -v grep|wc -l`
  if [ $count == 0 ]; then
    stopped=1
    echo " server stopped."
    break;
  fi

  if [ $sleep -gt 0 ]; then
    sleep 1
  fi

  if [ $sleep -eq 0 ]; then
    echo "server did not stopped in time."
  fi
  sleep=`expr $sleep - 1 `
done

if [ $stopped -eq 0 ]; then
  echo "server killed fore"
  sleep=5
  kill -15 $app_id
  while [ $sleep -ge 0 ]; do
    count=`ps -ef|grep java|grep $work_home|grep $main_class|grep -v grep|wc -l`
    if [ $count == 0 ]; then
      stopped=1
      echo " server has been killed."
      break;
    fi

    if [ $sleep -gt 0 ]; then
      sleep 1
    fi

    if [ $sleep -eq 0 ]; then
      echo "server did not stopped in time."
    fi
    sleep=`expr $sleep - 1 `
  done
  if [ $stopped -eq 0 ]; then
    echo "server has not been killed completely yet."
  fi
fi

执行结果

以上就是java应用启动与停止的shell脚本分享的详细内容,更多关于java应用启动与停止的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com