本shell脚本可以便捷的启动或停止java应用程序包含(spring-boot),且支持重启、停止、查看日志登命令。免去使用kill命令结束进程
# 设置可执行命令 (不设置的话可以使用 sh 执行)
chmod +x ./runjava.sh
使用
./runjava.sh jar所在路径 start|stop|restart java程序参数(非必须)
./runjava.sh [xxx.jar] [start|startnolog|stop|restart|status|logshow|run] [springboot参数]
./runjava.sh /home/xx/a.jar start|stop|restart|run --spring.profiles.active=prd
start: 启动
startnolog: 启动但不输出日志
stop: 停止
restart: 重启
status: 查看进程状态
logshow: 查看日志
run: 启动并能直接看到输出日志,不用再次使用tail 查看日志
设置日志输出目录
在runjava.sh 统计目录中run.conf文件中配置logdir参数,如果没有run.conf配置文件默认输出到当前目录的logs子文件夹中。
例如启动a.jar spring-boot 应用程序
1. 启动 a.jar
./runjava.sh /home/xx/a.jar start --spring.profiles.active=prd
2. 停止 a.jar
./runjava.sh /home/xx/a.jar stop
3. 重启 a.jar
./runjava.sh /home/xx/a.jar restart
4. 查看 a.jar
./runjava.sh /home/xx/a.jar status
5. 查看 a.jar 输出日志
./runjava.sh /home/xx/a.jar logshow
runjava.sh
#!/bin/sh
# java env
# author efei
export JAVA_HOME=/home/xefei/java/jdk1.8.0_181
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
# s1==jar $2 start|stop|restart|run | $3 --pro prams |
#JAVA_OPTS="-server -Xms400m -Xmx400m -Xmn300m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xverify:none -XX:+DisableExplicitGC -Djava.awt.headless=true"
JAVA_OPTS=" -server -Xms500m -Xmx500m -Xmn350m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -XX:+UseConcMarkSweepGC -XX:+PrintGCDateStamps -XX:+PrintGCDetails -Xloggc:logs/gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=logs/"
# 获取jar名字
JAR_PARAM=$3
JAR_PATH=$1
JAR_NAME=${JAR_PATH##*/}
API_NAME=${JAR_NAME%.jar}
# 获取参数
getpropv() {
if [ ! -f "run.conf" ]
then
echo ''
return 0
fi
if [ "e" != "e${1}" ]
then
str=$(grep "${1}" run.conf | cut -d'=' -f2 | sed 's/\r//')
echo $str
fi
}
this_dir=$(cd `dirname $0`; pwd)
prov=$(getpropv "logdir")
if [ "X$prov" = "X" ]
then
log_dir="${this_dir}/logs"
else
log_dir="${prov}/logs"
fi
if [ ! -d "${log_dir}" ]; then
mkdir "${log_dir}"
fi
#PID 代表是PID文件
PID=$API_NAME.pid
#使用说明,用来提示输入参数
usage() {
echo "Usage: sh 执行脚本.sh [xxx.jar] [start|startnolog|stop|restart|status|logshow|run] [springboot参数]"
exit 1
}
#echo "ps -ef|grep 'java -jar "$JAR_NAME"'|grep -v grep|awk '{print $2}'"
#检查程序是否在运行
is_exist(){
pid=`ps -ef|grep $JAR_NAME|grep -v grep|grep -v $0|awk '{print $2}' `
#如果不存在返回1,存在返回0
if [ -z "${pid}" ]; then
return 1
else
return 0
fi
}
#启动方法
start(){
is_exist
if [ $? -eq "0" ]; then
echo ">>> ${JAR_NAME} is already running PID=${pid} <<<"
else
nohup java -jar $JAVA_OPTS $JAR_PATH $JAR_PARAM > "$log_dir"/catalina_"$API_NAME".out 2>&1 &
sleep 1
echo $! > $PID
echo ">>> start $JAR_NAME successed PID=$! <<<"
fi
}
startnolog(){
is_exist
if [ $? -eq "0" ]; then
echo ">>> ${JAR_NAME} is already running PID=${pid} <<<"
else
nohup java -jar $JAVA_OPTS $JAR_PATH $JAR_PARAM > "/dev/null" 2>&1 &
sleep 1
echo $! > $PID
echo ">>> start $JAR_NAME successed PID=$! <<<"
fi
}
#停止方法
stop(){
#is_exist
if [ ! -f $PID ];then
echo '>>> PID is null,maybe is not runing<<<'
return 0
fi
pidf=$(cat $PID)
#echo "$pidf"
echo ">>> api PID = $pidf begin kill $pidf <<<"
kill $pidf
rm -rf $PID
#sleep 2
#is_exist
local begin=$(date +%s)
local end
while true
do
sleep 1
end=$(date +%s)
is_exist
if [ $? -eq "1" ]; then
break
fi
if [ $((end-begin)) -gt 60 ];then
echo ">>> kill $pidf timeout ,now exec kill -9 $pidf<<< "
break
fi
done
is_exist
if [ $? -eq "0" ]; then
echo ">>> api 2 PID = $pidf begin kill -9 $pidf <<<"
kill -9 $pidf
sleep 2
echo ">>> $JAR_NAME process stopped <<<"
else
echo ">>> ${JAR_NAME} is not running <<<"
fi
}
#输出运行状态
status(){
is_exist
if [ $? -eq "0" ]; then
echo ">>> ${JAR_NAME} is running PID is ${pid} <<<"
else
echo ">>> ${JAR_NAME} is not running <<<"
fi
}
# 查看log
logshow(){
if [ -f "${log_dir}/catalina_${API_NAME}.out" ]
then
tail -f "${log_dir}/catalina_${API_NAME}.out"
else
echo "${log_dir}/catalina_${API_NAME}.out 文件不存在"
fi
}
#重启
restart(){
stop
start
}
#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$2" in
"start")
start
;;
"startnolog")
startnolog
;;
"stop")
stop
;;
"status")
status
;;
"restart")
restart
;;
"run")
start
logshow
;;
"logshow")
logshow
;;
*)
usage
;;
esac
exit 0