jar启动脚本
用于管理 SpringBoot 应用的 shell 脚本,可自动识别当前目录下前缀为 “xxx” 的版本号最大的 jar 包,并提供启动、停止、重启、查看状态及日志的功能。 下载run.sh
#!/bin/sh
# 应用基础名称,用于匹配相关jar包
APP_PREFIX="vlog-server"
# 启动参数,指定生产环境配置
EXEC_ARGS="--spring.profiles.active=prod"
# 查找当前目录下版本号最大的jar包
# 逻辑说明:
# 1. 列出所有以APP_PREFIX开头的jar包(格式如vlog-server-x.y.z.jar)
# 2. 使用sort -V按版本号规则排序(支持x.y.z格式)
# 3. 取排序后的最后一个(版本号最大)
JAR_FILE=$(ls -1 "${APP_PREFIX}"-*.jar 2>/dev/null | sort -V | tail -n 1)
# 显示脚本使用帮助信息
usage() {
echo "Usage: sh 执行脚本.sh [start|stop|restart|status|log]"
exit 1
}
# 检查应用是否正在运行
# 返回值:
# 0 - 应用正在运行(pid变量会被赋值)
# 1 - 应用未运行
is_exist(){
# 通过jar包名查找进程(排除grep自身进程),获取进程ID
pid=$(ps -ef | grep "${JAR_FILE}" | grep -v grep | awk '{print $2}')
# 判断pid是否为空,为空则未运行
if [ -z "${pid}" ]; then
return 1
else
return 0
fi
}
# 启动应用
start(){
# 先检查应用是否已运行
is_exist
if [ $? -eq "0" ]; then
echo "${JAR_FILE} is already running. pid=${pid} ."
else
# 检查是否找到可用的jar包
if [ -z "${JAR_FILE}" ]; then
echo "Error: No ${APP_PREFIX}-*.jar file found in current directory!"
exit 1
fi
# 后台启动应用,输出重定向到/dev/null(不生成nohup.out)
nohup java -jar "${JAR_FILE}" ${EXEC_ARGS} >/dev/null 2>&1 &
echo "${JAR_FILE} starting..."
fi
}
# 停止应用
stop(){
# 检查应用是否在运行
is_exist
if [ $? -eq "0" ]; then
# 发送终止信号(15是SIGTERM,优雅终止)
kill -15 "${pid}"
echo "${JAR_FILE} stopping..."
# 等待1秒后检查是否已停止
sleep 1
is_exist
if [ $? -eq "0" ]; then
# 如果仍在运行,循环等待直到停止
while [ $? -eq "0" ]
do
sleep 1
is_exist
done
fi
echo "${JAR_FILE} is stopped OK"
else
echo "${JAR_FILE} is not running"
fi
}
# 查看应用运行状态
status(){
is_exist
if [ $? -eq "0" ]; then
echo "${JAR_FILE} is running. Pid is ${pid}"
else
echo "${JAR_FILE} is NOT running."
fi
}
# 查看应用日志(跟踪当前目录下所有日志文件)
log(){
tail -f *.log
}
# 重启应用(先停止再启动)
restart(){
stop
start
}
# 根据输入参数执行对应命令
case "$1" in
"start")
start
;;
"stop")
stop
;;
"status")
status
;;
"restart")
restart
;;
"log")
log
;;
*)
usage
;;
esac
本文链接:
/archives/1763448628240
版权声明:
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自
微博客!
喜欢就支持一下吧