restart.sh 脚本是一个用于 Java 应用程序的重启脚本,支持以下功能:
JAVA_HOME 环境变量中的 Javajava 命令-Xms4g -Xmx8g (初始4GB,最大8GB堆内存)./baseLogs/app.log./baseLogs/gc.log./baseLogs/startRecord.log./dump/web-app-starter-2.2.0-SNAPSHOT.jarset -euo pipefail 确保脚本在出错时立即退出这个脚本特别适用于 Spring Boot 应用的生产环境部署和维护,提供了完整的启停控制和监控功能。
#!/bin/bash
set -euo pipefail
APP_NAME="填写jar名称.jar"
APP_DIR="$(cd "$(dirname "$0")" && pwd)"
JAR_PATH="${APP_DIR}/${APP_NAME}"
RUN_TAG="${APP_NAME}"
# JAVA_BIN 优先用 JAVA_HOME,否则用系统 java
if [ -n "${JAVA_HOME:-}" ] && [ -x "${JAVA_HOME}/bin/java" ]; then
JAVA_BIN="${JAVA_HOME}/bin/java"
else
JAVA_BIN="java"
fi
LOG_DIR="./baseLogs/"
DUMP_DIR="./dump/"
GC_LOG="${LOG_DIR}/gc.log"
# 如果无法启动可以在这里app.log 看下JVM无法创建虚拟机的信息
APP_OUT="${LOG_DIR}/app.log"
START_LOG="${LOG_DIR}/startRecord.log"
HEAP_OPTS="-Xms4g -Xmx8g"
GC_OPTS="-XX:+UnlockExperimentalVMOptions -XX:+UseG1GC"
ERR_OPTS="" # "-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${DUMP_DIR} -XX:ErrorFile=${DUMP_DIR}/hs_err_pid%p.log -XX:+CreateMinidumpOnCrash"
SYS_PROPS="-Dspring.profiles.active=dev -Dserver.port=9000"
START_TIMEOUT=20
STOP_TIMEOUT=20
mkdir -p "${LOG_DIR}" "${DUMP_DIR}"
if [ ! -f "${JAR_PATH}" ]; then
echo "[$(date +'%F %T')] JAR 不存在: ${JAR_PATH}" | tee -a "${START_LOG}"
exit 1
fi
pids=$(pgrep -f "${RUN_TAG}" || true)
if [ -n "${pids}" ]; then
echo "[$(date +'%F %T')] 正在停止进程: ${pids}" | tee -a "${START_LOG}"
kill ${pids} || true
for i in $(seq 1 ${STOP_TIMEOUT}); do
sleep 1
still=$(pgrep -f "${RUN_TAG}" || true)
[ -z "${still}" ] && break
done
still=$(pgrep -f "${RUN_TAG}" || true)
if [ -n "${still}" ]; then
echo "[$(date +'%F %T')] 发送 KILL: ${still}" | tee -a "${START_LOG}"
kill -9 ${still} || true
fi
else
echo "[$(date +'%F %T')] 无需停止,未发现旧进程" | tee -a "${START_LOG}"
fi
echo "[$(date +'%F %T')] 开始启动 ${APP_NAME}" | tee -a "${START_LOG}"
nohup ${JAVA_BIN:-java} \
${HEAP_OPTS} ${GC_OPTS} ${ERR_OPTS} ${SYS_PROPS} \
-jar "${JAR_PATH}" \
>> "${APP_OUT}" 2>&1 &
new_pid=$!
echo "[$(date +'%F %T')] 启动中,PID=${new_pid}" | tee -a "${START_LOG}"
for i in $(seq 1 ${START_TIMEOUT}); do
if ps -p "${new_pid}" > /dev/null 2>&1; then
echo "[$(date +'%F %T')] 启动成功 PID=${new_pid}" | tee -a "${START_LOG}"
exit 0
fi
sleep 1
done
echo "[$(date +'%F %T')] 启动超时,检查日志 ${APP_OUT}" | tee -a "${START_LOG}"
exit 2特殊说明: 上述文章均是作者实际操作后产出。烦请各位,请勿直接盗用!转载记得标注原文链接:www.zanglikun.com 第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取最新全部资料 ❤ 免责声明: 本站文章旨在总结学习互联网技术过程中的经验与见解。任何人不得将其用于违法或违规活动!所有违规内容均由个人自行承担,与作者无关。