分享一个启动(更新)java包的sh脚本
大家好我是小星,今天分享一个启动java的脚本
#!/bin/sh
# 指定脚本使用的解释器为/bin/sh。
#定义一个变量enable_JAVAOPTS,用于控制是否启用Java选项。值为1表示启用,值为0表示禁用。
#eanble java Options(1->on , 0->off)
enable_JAVAOPTS=1
#获取脚本所在目录的绝对路径,并赋值给SH_DIR变量。
SH_DIR=$(cd `dirname $0`;pwd)
#查找SH_DIR父目录下最新的.jar文件,并赋值给latestjar变量。ls -lt按照时间排序,grep '.jar'筛选出.jar文件,awk '{print $9}'获取文件名,sed -n '1p'取出第一个文件名。
latestjar=`ls $SH_DIR/.. -lt | grep '.jar'| awk '{print $9}' | sed -n '1p'`
#检查当前系统中是否有已经运行的与latestjar相关的Java进程,并获取进程ID。ps -ef列出所有进程,grep $latestjar筛选出包含latestjar的进程,grep -v grep排除grep本身的进程,awk '{print $2}'获取进程ID。
process_exists=`ps -ef|grep $latestjar|grep -v grep|awk '{print $2}'`
#定义一个函数parse_jvm_options,用于解析JVM选项文件中的选项。文件每行以“-”开头的选项被提取并以空格分隔。
parse_jvm_options() {
if [ -f "$1" ]; then
echo "$(grep "^-" "$1" | tr '\n' ' ')"
fi
}
#如果环境变量JVM_OPTIONS未定义,则在SH_DIR父目录下的config目录中查找名为jvm.options的文件,并将其路径赋值给JVM_OPTIONS变量。
if [ -z "$JVM_OPTIONS" ]; then
for jvm_options in $SH_DIR/../config/jvm.options
do
if [ -r "$jvm_options" ]; then
JVM_OPTIONS=$jvm_options
break
fi
done
fi
#如果enable_JAVAOPTS为1,则调用parse_jvm_options函数解析JVM_OPTIONS文件,并将解析的选项赋值给JAVA_OPTS变量;否则,将JAVA_OPTS变量置为空。
if [ "$enable_JAVAOPTS" -eq 1 ]; then
JAVA_OPTS="$(parse_jvm_options "$JVM_OPTIONS") $JAVA_OPTS"
else
JAVA_OPTS=""
fi
if [ -x "$JAVA_HOME/bin/java" ]; then
JAVA="$JAVA_HOME/bin/java"
else
JAVA=`which java`
fi
#检查JAVA_HOME环境变量指向的Java二进制文件是否存在并可执行。如果存在,则将其路径赋值给JAVA变量;否则,使用which java命令查找系统中的Java二进制文件路径。
if [ ! -x "$JAVA" ]; then
#如果JAVA变量指向的Java二进制文件不可执行,则输出错误信息并退出脚本。
echo "Could not find any executable java binary. Please install java in your PATH or set JAVA_HOME"
exit 1
fi
#如果process_exists变量非空,则强制杀死与latestjar相关的运行中的Java进程
if [ -n "${process_exists}" ];then
kill -9 ${process_exists}
fi
#切换到SH_DIR的父目录。
cd $SH_DIR/../;
# 输出启动信息,包括要启动的.jar文件名。
echo 'start:'$latestjar
nohup $JAVA $JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError -jar $SH_DIR/../$latestjar > /dev/null 2>&1 &
在jar文件同级文件新建bin 文件夹 将 此脚本命令文件放入bin目录下即可