Java启动JAR,.sh版
#!/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

浙公网安备 33010602011771号