整体思路
基于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应用启动与停止的资料请关注代码网其它相关文章!
发表评论