|
|
|
@ -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 |
|
|
|
``` |