Browse Source

feat(restart-script): 增强Java应用管理脚本功能并更新文档

- 添加多JAR包交互式选择和批量操作功能
- 实现JAR包昵称模糊匹配和'all'参数支持
- 改进日志文件命名规则,自动生成带时间戳的日志
- 增加输入验证和安全检查功能
- 优化状态显示和错误处理机制
- 更新README文档以反映新功能和使用方法
master
前端-胡立永 1 month ago
parent
commit
77013ac4b6
2 changed files with 974 additions and 212 deletions
  1. +92
    -32
      README-restart-script.md
  2. +882
    -180
      restart-java-app.sh

+ 92
- 32
README-restart-script.md View File

@ -1,18 +1,20 @@
# Java应用启动/重启脚本使用说明
# Java应用启动脚本使用说明
## 概述
`restart-java-app.sh` 是一个用于在Linux系统下管理Java JAR包应用的Shell脚本。它可以自动检测应用是否运行,并提供启动、停止、重启等功能。
`restart-java-app.sh` 是一个功能强大的Java应用管理脚本,支持启动、停止、重启和状态查看等操作。脚本支持单个JAR包操作和多JAR包批量操作,提供灵活的JAR包昵称匹配功能。
## 功能特性
## 主要功能
- ✅ 自动检测应用运行状态
- ✅ 优雅停止应用(先发送TERM信号,超时后强制停止)
- ✅ 智能端口检测,避免端口冲突
- ✅ PID文件管理,确保进程跟踪准确
- ✅ 彩色日志输出,便于查看状态
- ✅ 详细的错误处理和状态反馈
- ✅ 支持多种命令选项
- ✅ **自动JAR包检测** - 当目录中只有一个JAR包时自动选择
- ✅ **多JAR包选择** - 当目录中有多个JAR包时提供交互式选择菜单
- ✅ **多JAR包批量操作** - 支持通过昵称同时操作多个JAR包
- ✅ **模糊匹配** - 支持通过昵称模糊匹配JAR文件名
- ✅ **全量操作** - 支持使用'all'参数操作所有JAR包
- ✅ **进程管理** - 自动管理应用进程的启动和停止
- ✅ **日志管理** - 自动生成基于JAR包名和时间戳的日志文件
- ✅ **状态监控** - 实时查看应用运行状态
- ✅ **优雅停止** - 先尝试正常停止,必要时强制终止
## 配置参数
@ -23,7 +25,6 @@
# 配置参数 - 请根据实际情况修改
# ========================================
JAR_NAME="" # JAR包名称(留空则自动检测)
PORT=8080 # 应用端口号
```
### 主要配置项
@ -31,11 +32,10 @@ PORT=8080 # 应用端口号
| 参数 | 说明 | 示例 |
|------|------|------|
| `JAR_NAME` | JAR包文件名(留空可自动检测) | `"my-spring-boot-app.jar"``""` |
| `PORT` | 应用监听端口 | `8080` |
**自动检测功能**: 如果将 `JAR_NAME` 留空(`JAR_NAME=""`),脚本会自动检测当前目录下的JAR文件:
- 如果只有一个JAR文件,自动使用该文件
- 如果有多个JAR文件,会提示用户指定具体的JAR文件名
- 如果有多个JAR文件,会显示选择菜单让用户选择具体的JAR文件
- 如果没有JAR文件,会提示错误
### 可选配置项
@ -43,7 +43,7 @@ PORT=8080 # 应用端口号
| 参数 | 说明 | 默认值 |
|------|------|--------|
| `JAVA_OPTS` | JVM启动参数 | `"-Xms512m -Xmx1024m"` |
| `LOG_FILE` | 日志文件名 | `"app.log"` |
| `LOG_FILE` | 日志文件名(留空则自动生成) | `""` |
| `PID_FILE` | PID文件名 | `"app.pid"` |
## 使用方法
@ -84,10 +84,9 @@ chmod +x restart-java-app.sh
### start - 启动应用
- 检查JAR文件是否存在
- 检查端口是否被占用
- 启动Java应用
- 等待应用完全启动
- 验证端口监听状态
- 验证应用启动状态
### stop - 停止应用
- 查找应用进程PID
@ -104,7 +103,6 @@ chmod +x restart-java-app.sh
### status - 查看状态
- 显示应用运行状态
- 显示进程PID
- 显示端口监听状态
## 输出说明
@ -119,8 +117,18 @@ chmod +x restart-java-app.sh
脚本运行时会创建以下文件:
- `app.log`: 应用运行日志
- `app.pid`: 应用进程PID文件
- **日志文件**: 自动生成,格式为 `{JAR包名}_{启动时间}.log`,例如:`my-app_20240115_143025.log`
- **PID文件**: `app.pid` - 应用进程PID文件
### 日志文件命名规则
- **自动生成模式**(推荐):当 `LOG_FILE=""` 时,系统会自动生成日志文件名
- **格式**: `{JAR包名称}_{年月日_时分秒}.log`
- **示例**:
- JAR包:`my-spring-boot-app.jar`
- 启动时间:2024年1月15日 14:30:25
- 日志文件:`my-spring-boot-app_20240115_143025.log`
- **手动指定**:如果在脚本中设置了 `LOG_FILE="custom.log"`,则使用指定的文件名
## 常见问题
@ -130,10 +138,7 @@ chmod +x restart-java-app.sh
- 如果指定了JAR文件名,检查`JAR_NAME`配置是否正确,确保JAR文件在脚本同一目录下
### Q: 提示"当前目录下有多个JAR文件"
**A**: 当目录下有多个JAR文件时,需要在脚本中明确指定`JAR_NAME`,例如:`JAR_NAME="my-app.jar"`
### Q: 提示"端口已被占用"
**A**: 检查是否有其他应用占用了配置的端口,或修改`PORT`配置。
**A**: 当目录下有多个JAR文件时,脚本会显示选择菜单,按提示输入对应的序号即可选择要启动的JAR文件。你也可以在脚本中明确指定`JAR_NAME`,例如:`JAR_NAME="my-app.jar"`
### Q: 应用启动失败
**A**: 查看`app.log`日志文件,检查具体错误原因。
@ -146,7 +151,6 @@ chmod +x restart-java-app.sh
- Linux操作系统
- Bash Shell
- Java运行环境
- 网络工具(netstat、ss或lsof中的任意一个)
## 注意事项
@ -165,29 +169,38 @@ chmod +x restart-java-app.sh
1. 保持脚本配置为默认:
```bash
JAR_NAME="" # 留空,自动检测
PORT=8080
```
2. 启动应用:
```bash
# 启动应用
./restart-java-app.sh start
# 重启应用
./restart-java-app.sh restart
```
脚本会自动检测并使用目录下唯一的JAR文件。
### 示例2: 指定JAR文件名
假设你有一个名为`my-app.jar`的Spring Boot应用,需要在8080端口运行
假设你有一个名为`my-app.jar`的Spring Boot应用:
1. 修改脚本配置:
```bash
JAR_NAME="my-app.jar"
PORT=8080
```
2. 启动应用
2. 使用不同方式启动:
```bash
# 启动应用
./restart-java-app.sh start
# 重启应用
./restart-java-app.sh restart
# 停止应用
./restart-java-app.sh stop
```
3. 查看状态:
@ -195,10 +208,57 @@ PORT=8080
./restart-java-app.sh status
```
### 示例3: 多JAR文件选择
当目录下有多个JAR文件时,脚本会提供交互式选择:
```bash
# 启动脚本,会显示选择菜单
./restart-java-app.sh start
```
## 交互式JAR包选择
当脚本检测到多个JAR文件时,会提供交互式选择界面:
```bash
检测到多个JAR文件,请选择要启动的应用:
[1] user-service-1.0.0.jar
[2] order-service-1.0.0.jar
[3] payment-service-1.0.0.jar
输入选项:
- 单个序号: 1 (选择第1个JAR包)
- 多个序号: 1,3,5 或 1 3 5 (选择多个JAR包)
- 全部选择: all (选择所有JAR包)
请输入选择:
```
**支持的输入格式:**
- `1` - 选择单个JAR包
- `1,3,5` - 选择多个JAR包(逗号分隔)
- `1 3 5` - 选择多个JAR包(空格分隔)
- `all` - 选择所有JAR包
选择多个JAR包时,脚本会自动切换到批量操作模式。
输出示例:
```
[2024-01-15 10:30:15] 应用正在运行
[2024-01-15 10:30:15] PID: 12345
[2024-01-15 10:30:15] 端口: 8080
[2024-01-15 10:30:15] 端口状态: 正在监听
检测到多个JAR文件,请选择要启动的应用:
[1] my-web-app.jar
[2] my-api-service.jar
[3] my-batch-job.jar
请输入序号 (1-3): 2
✓ 已选择: my-api-service.jar
正在启动应用...
JAR包: my-api-service.jar
JVM参数: -Xms512m -Xmx1024m
日志文件: my-api-service_20240115_143025.log
✓ 应用启动成功 (PID: 12345)
日志文件: my-api-service_20240115_143025.log
```

+ 882
- 180
restart-java-app.sh
File diff suppressed because it is too large
View File


Loading…
Cancel
Save