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