141 lines
3.5 KiB
Bash
141 lines
3.5 KiB
Bash
#!/bin/bash
|
|
# ./ry.sh start 启动 stop 停止 restart 重启 status 状态
|
|
AppName=ruoyi-admin.jar
|
|
|
|
export JAVA_HOME=/project/jdk-21.0.10
|
|
export PATH=$JAVA_HOME/bin:$PATH
|
|
|
|
# 自动检测 CPU 核数,选择 JVM 规格(可用 JVM_PROFILE 环境变量覆盖)
|
|
if [ -z "$JVM_PROFILE" ]; then
|
|
CPUS=$(nproc)
|
|
if [ "$CPUS" -le 16 ]; then
|
|
JVM_PROFILE="16c32g"
|
|
else
|
|
JVM_PROFILE="32c64g"
|
|
fi
|
|
fi
|
|
|
|
case "$JVM_PROFILE" in
|
|
16c32g)
|
|
HEAP_SIZE="10g"
|
|
GC_REGION="8m"
|
|
GC_PARALLEL="5"
|
|
GC_CONC="2"
|
|
;;
|
|
32c64g)
|
|
HEAP_SIZE="22g"
|
|
GC_REGION="16m"
|
|
GC_PARALLEL="10"
|
|
GC_CONC="3"
|
|
;;
|
|
*)
|
|
echo "ERROR: unknown JVM_PROFILE=$JVM_PROFILE (supported: 16c32g, 32c64g)"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
echo "JVM Profile: ${JVM_PROFILE} | Heap: ${HEAP_SIZE} | ParallelGCThreads=${GC_PARALLEL} ConcGCThreads=${GC_CONC}"
|
|
|
|
# Spring Profile(可用 SPRING_PROFILE 环境变量覆盖)
|
|
SPRING_PROFILE="${SPRING_PROFILE:-pro}"
|
|
|
|
# JVM参数
|
|
LOG_DIR=/www/ruoyi/logs
|
|
JVM_OPTS="-Dname=$AppName -Duser.timezone=Asia/Shanghai -Xms${HEAP_SIZE} -Xmx${HEAP_SIZE} -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:G1HeapRegionSize=${GC_REGION} -XX:ParallelGCThreads=${GC_PARALLEL} -XX:ConcGCThreads=${GC_CONC} -XX:InitiatingHeapOccupancyPercent=35 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${LOG_DIR}/ -Xlog:gc*=info:file=${LOG_DIR}/gc.log:time,uptime:filecount=10,filesize=50M"
|
|
|
|
if [ "$1" = "" ]; then
|
|
echo -e "\033[0;31m 未输入操作名 \033[0m \033[0;34m {start|stop|restart|status} \033[0m"
|
|
exit 1
|
|
fi
|
|
|
|
if [ "$AppName" = "" ]; then
|
|
echo -e "\033[0;31m 未输入应用名 \033[0m"
|
|
exit 1
|
|
fi
|
|
|
|
get_pid() {
|
|
ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'
|
|
}
|
|
|
|
start() {
|
|
PID=`get_pid`
|
|
if [ x"$PID" != x"" ]; then
|
|
echo "$AppName is running..."
|
|
exit 1
|
|
fi
|
|
|
|
mkdir -p $LOG_DIR
|
|
|
|
nohup java $JVM_OPTS -Dspring.profiles.active=$SPRING_PROFILE -jar $AppName > /dev/null 2>&1 &
|
|
|
|
sleep 3
|
|
PID=`get_pid`
|
|
if [ x"$PID" != x"" ]; then
|
|
echo "Start $AppName success..."
|
|
else
|
|
echo "ERROR: $AppName failed to start, check logs"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
stop() {
|
|
echo "Stop $AppName"
|
|
|
|
PID=`get_pid`
|
|
if [ x"$PID" = x"" ]; then
|
|
echo "$AppName already stopped."
|
|
return
|
|
fi
|
|
|
|
TARGET_PID=$PID
|
|
kill -TERM $TARGET_PID
|
|
echo "$AppName (pid:$TARGET_PID) exiting..."
|
|
|
|
timeout=10
|
|
count=0
|
|
while kill -0 $TARGET_PID 2>/dev/null; do
|
|
count=$((count + 1))
|
|
if [ $count -gt $timeout ]; then
|
|
echo "$AppName graceful shutdown timed out after ${timeout}s, force killing..."
|
|
kill -9 $TARGET_PID 2>/dev/null || true
|
|
sleep 2
|
|
if kill -0 $TARGET_PID 2>/dev/null; then
|
|
echo "ERROR: $AppName still alive (pid:$TARGET_PID) after kill -9, abort."
|
|
exit 1
|
|
fi
|
|
echo "$AppName force killed."
|
|
return
|
|
fi
|
|
sleep 1
|
|
done
|
|
echo "$AppName exited."
|
|
}
|
|
|
|
restart() {
|
|
stop
|
|
start
|
|
}
|
|
|
|
status() {
|
|
PID=`ps -ef |grep java|grep $AppName|grep -v grep|wc -l`
|
|
if [ $PID != 0 ];then
|
|
echo "$AppName is running..."
|
|
else
|
|
echo "$AppName is not running..."
|
|
fi
|
|
}
|
|
|
|
case $1 in
|
|
start)
|
|
start;;
|
|
stop)
|
|
stop;;
|
|
restart)
|
|
restart;;
|
|
status)
|
|
status;;
|
|
*)
|
|
echo -e "\033[0;31m 未输入操作名 \033[0m \033[0;34m {start|stop|restart|status} \033[0m"
|
|
exit 1;;
|
|
esac
|