惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
罗磊的独立博客
博客园 - 【当耐特】
M
MIT News - Artificial intelligence
月光博客
月光博客
博客园_首页
博客园 - 叶小钗
T
Tailwind CSS Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
I
InfoQ
量子位
小众软件
小众软件
爱范儿
爱范儿
The GitHub Blog
The GitHub Blog
IT之家
IT之家
Jina AI
Jina AI
阮一峰的网络日志
阮一峰的网络日志
G
Google Developers Blog
WordPress大学
WordPress大学
人人都是产品经理
人人都是产品经理
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
J
Java Code Geeks
云风的 BLOG
云风的 BLOG
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报

博客园 - 李文学

Windows Server 2016 64位 ASP+Access(.mdb) 80004005 最简解决方案 Oracle查询表中指定库名,表约束名的上下表依赖关系 linux简版启动,关闭jar命令 Oracle11.2实例重启 主流数据库 “匹配更新、不匹配插入” 语法详解(Oracle/MSSQL/MySQL) Centos7扩容2 wps,两个页签比较常用函数 Oracle常见SQL示例 VUE-手机号验证 Centos7安装mysql8 Centos7安装ffmpeg 不同数据库标识长度检查 Centos7重置网络 Centos7磁盘空间自动处理 Oracle11新建业务库账号信息 linux常用命令 centos7防火墙IP白名单维护 centos7安装lamp,php5.6,mysql5.7,xdebug MSSQL最大内存设置
Java启动JAR,.sh版
李文学 · 2025-08-22 · via 博客园 - 李文学

#!/bin/bash

# 设置应用程序路径(根据实际目录结构调整)
APP_NAME="rywm-admin.jar"
APP_PATH="../$APP_NAME" # 从bin目录上一级找到JAR文件

# 获取当前日期,格式为:年-月-日
CURRENT_DATE=$(date +%Y-%m-%d)

# 设置日志路径,按天存储(日志目录将创建在work目录下)
LOG_DIR="../logs"
LOG_FILE_NAME="${APP_NAME%.*}_${CURRENT_DATE}.log" # 修正了这一行
LOG_PATH="$LOG_DIR/$LOG_FILE_NAME"

# 创建日志目录
if [ ! -d "$LOG_DIR" ]; then
mkdir -p "$LOG_DIR"
echo "创建日志目录: $LOG_DIR"
fi

# 日志记录函数
log() {
local message=$1
local timestamp=$(date +"%Y-%m-%d %H:%M:%S")
local log_message="[$timestamp] $message"
echo "$log_message" >> "$LOG_PATH"
}

# 显示菜单函数
show_menu() {
clear
echo "================================="
echo " JAR应用程序管理工具"
echo "================================="
echo " 应用程序: $APP_NAME"
echo " 路径: $APP_PATH"
echo "================================="
echo ""
echo " 1、 启动应用程序"
echo " 2、 停止应用程序"
echo " 3、 重启应用程序"
echo " 4、 查看当天应用日志"
echo " 5、 查看指定日期应用日志"
echo " 6、 实时查看应用日志"
echo " 7、 退出"
echo ""
echo "================================="
}

# 获取用户选择函数
get_choice() {
read -p "请输入选项 [1-7] " choice
while [[ -z "$choice" || ! "$choice" =~ ^[1-7]$ ]]; do
echo "无效的选项,请输入 1-7 之间的数字!"
sleep 2
show_menu
read -p "请输入选项 [1-7] " choice
done
echo "$choice"
}

# 启动应用程序函数
start_app() {
echo "正在启动应用程序..."
log "尝试启动应用程序..."

# 检查应用是否已在运行
pid=$(ps aux | grep "$APP_NAME" | grep -v grep | awk '{print $2}')
if [ -n "$pid" ]; then
echo "应用程序已在运行,进程ID: $pid"
log "启动失败:应用程序已在运行,进程ID: $pid"
read -p "按回车键继续..."
return
fi

# 启动应用并后台运行
nohup java -Dfile.encoding=UTF-8 -jar "$APP_PATH" >> "$LOG_PATH" 2>&1 &
echo "应用程序启动中..."
sleep 2

# 检查启动是否成功
pid=$(ps aux | grep "$APP_NAME" | grep -v grep | awk '{print $2}')
if [ -n "$pid" ]; then
echo "应用程序已启动,进程ID: $pid"
log "应用程序已启动,进程ID: $pid"
else
echo "应用程序启动失败,请查看日志"
log "应用程序启动失败"
fi
read -p "按回车键继续..."
}

# 停止应用程序函数
stop_app() {
echo "正在停止应用程序..."
log "尝试停止应用程序..."

pid=$(ps aux | grep "$APP_NAME" | grep -v grep | awk '{print $2}')
if [ -n "$pid" ]; then
kill -9 "$pid"
echo "正在终止进程 $pid..."
sleep 2

# 确认进程已停止
if ps -p "$pid" > /dev/null; then
echo "终止进程失败,请手动检查"
log "终止进程失败,进程ID: $pid"
else
echo "应用程序已停止"
log "应用程序已停止,进程ID: $pid"
fi
else
echo "未找到正在运行的应用程序"
log "停止失败:未找到正在运行的应用程序"
fi
read -p "按回车键继续..."
}

# 重启应用程序函数
restart_app() {
echo "正在重启应用程序..."
log "尝试重启应用程序..."
stop_app
start_app
}

# 查看当天应用日志函数
view_today_log() {
echo "正在查看当天应用日志: $LOG_PATH"
if [ -f "$LOG_PATH" ]; then
less "$LOG_PATH"
else
echo "当天日志文件不存在!"
log "查看当天日志失败:日志文件不存在"
fi
read -p "按回车键继续..."
}

# 查看指定日期应用日志函数
view_specific_log() {
read -p "请输入要查看日志的日期(格式:年-月-日,例如 2025-04-29)" specific_date
specific_log_name="${APP_NAME%.*}_${specific_date}.log"
specific_log_path="$LOG_DIR/$specific_log_name"
if [ -f "$specific_log_path" ]; then
less "$specific_log_path"
else
echo "指定日期的日志文件不存在:$specific_log_path"
log "查看指定日期日志失败:日志文件不存在,日期:$specific_date"
fi
read -p "按回车键继续..."
}

# 实时查看应用日志函数
view_realtime_log() {
echo "正在实时查看应用日志(按 Ctrl + C 停止查看)..."
if [ -f "$LOG_PATH" ]; then
tail -f -n 1000 "$LOG_PATH"
else
echo "日志文件不存在!"
fi
read -p "按回车键继续..."
}

# 主循环
while true; do
show_menu
choice=$(get_choice)
case $choice in
1) start_app ;;
2) stop_app ;;
3) restart_app ;;
4) view_today_log ;;
5) view_specific_log ;;
6) view_realtime_log ;;
7)
echo "退出应用程序管理工具..."
log "退出应用程序管理工具"
break
;;
*)
echo "无效的选项,请输入 1-7 之间的数字!"
sleep 2
;;
esac
done

目录结构

/home/bizuser/logs

/home/bizuser/work/logs

/home/bizuser/work/bin/restart.sh

/home/binzuser/work/rywm-admin.jar

执行权限

chmod +x  /home/bizuser/work/bin/restart.sh