# restart-java-app **Repository Path**: huliyong/restart-java-app ## Basic Information - **Project Name**: restart-java-app - **Description**: 这是一个功能强大的Java应用管理脚本,支持启动、停止、重启和状态查看等操作。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-27 - **Last Updated**: 2025-09-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Java应用启动/重启脚本使用说明 这是一个功能强大的Java应用管理脚本,支持启动、停止、重启和状态查看等操作。 ## 脚本特性 - **自动检测JAR包**: 无需手动配置,自动检测当前目录下的JAR文件 - **多JAR包支持**: 支持同时管理多个JAR包应用 - **智能选择**: 多个JAR包时提供交互式选择界面 - **批量操作**: 支持批量启动、停止、重启多个应用 - **安全验证**: 包含输入验证和文件安全检查 - **详细日志**: 每个应用独立的日志文件,包含时间戳 - **进程管理**: 优雅停止和强制终止机制 - **状态监控**: 实时显示应用运行状态 - **环境检查**: 自动验证Java环境和系统资源 ## 安装方法 ### 1. 获取脚本 ```bash # 从本项目下载所有文件,然后上传到服务器 # 包含以下文件: # - restart-java-app # 主脚本文件 # - install-completion.sh # 命令补全安装脚本 # - restart-java-app-completion.bash # Bash补全脚本 # - restart-java-app-completion.zsh # Zsh补全脚本 # 上传到服务器后,确保文件在同一目录下 ``` ### 2. 全局安装(三选一) #### 方法一:复制到系统PATH目录(推荐) ```bash # 复制脚本到系统目录 sudo cp restart-java-app /usr/local/bin/restart-java-app sudo chmod +x /usr/local/bin/restart-java-app # 现在可以在任何目录使用 restart-java-app ``` #### 方法二:创建符号链接 ```bash # 创建符号链接到系统目录 sudo ln -s /path/to/restart-java-app /usr/local/bin/restart-java-app # 现在可以在任何目录使用 restart-java-app ``` #### 方法三:添加到用户PATH ```bash # 创建用户bin目录 mkdir -p ~/bin # 复制脚本 cp restart-java-app ~/bin/restart-java-app chmod +x ~/bin/restart-java-app # 添加到PATH(添加到 ~/.bashrc 或 ~/.zshrc) echo 'export PATH="$HOME/bin:$PATH"' >> ~/.bashrc source ~/.bashrc ``` ### 3. 安装命令补全(推荐) 为了获得更好的使用体验,建议安装命令补全功能: ```bash # 运行安装脚本 ./install-completion.sh # 重新加载shell配置 source ~/.bashrc # 对于bash用户 # 或 source ~/.zshrc # 对于zsh用户 ``` 安装后,你可以使用Tab键进行智能补全: - `restart-java-app ` - 补全操作命令(start, stop, restart, status) - `restart-java-app start ` - 补全当前目录下的JAR包名 - `restart-java-app restart my` - 补全以"my"开头的JAR包名 - `restart-java-app stop ` - 显示"all"选项和具体JAR包名 ## 使用方法 ### 命令格式 ```bash restart-java-app [可选:指令] [jar包...] ``` ### 基本用法 ```bash # 重启应用(默认操作) ./restart-java-app # 或者明确指定重启 ./restart-java-app restart ``` ### 指定JAR包操作 ```bash # 启动指定的单个JAR包 ./restart-java-app start my-app.jar # 启动多个JAR包 ./restart-java-app start app1.jar app2.jar app3.jar # 重启指定的JAR包 ./restart-java-app restart my-service.jar # 停止多个JAR包 ./restart-java-app stop service1.jar service2.jar # 查看指定JAR包状态 ./restart-java-app status my-app.jar ``` ### 其他命令 ```bash # 启动应用(自动检测或交互选择) ./restart-java-app start # 停止应用 ./restart-java-app stop # 查看应用状态 ./restart-java-app status # 显示帮助信息 ./restart-java-app help ``` ## 命令详解 ### start - 启动应用 - 检查JAR文件是否存在 - 启动Java应用 - 等待应用完全启动 - 验证应用启动状态 ### stop - 停止应用 - 查找应用进程PID - 发送TERM信号优雅停止 - 等待最多30秒 - 超时后强制停止(KILL信号) - 清理PID文件 ### restart - 重启应用 - 先执行stop操作 - 等待2秒 - 再执行start操作 ### status - 查看状态 - 显示应用运行状态 - 显示进程PID ## 输出说明 脚本使用彩色输出来区分不同类型的消息: - 🔴 **红色**: 错误信息 - 🟢 **绿色**: 成功信息 - 🟡 **黄色**: 警告信息 - 🔵 **蓝色**: 操作信息 ## 文件说明 脚本运行时会创建以下文件: - **日志文件**: 自动生成,存储在 `log/{JAR包名}/` 目录下,格式为 `{启动时间}.log` - **PID文件**: `app.pid` - 应用进程PID文件 ### 日志文件命名规则 - **自动生成模式**(推荐):当 `LOG_FILE=""` 时,系统会自动生成日志文件名和路径 - **目录结构**: `log/{JAR包名称}/` - **文件格式**: `{年月日_时分秒}.log` - **示例**: - JAR包:`my-spring-boot-app.jar` - 启动时间:2024年1月15日 14:30:25 - 日志文件路径:`log/my-spring-boot-app/20240115_143025.log` - **目录自动创建**:脚本会自动创建 `log/{JAR包名}/` 目录结构 - **手动指定**:如果在脚本中设置了 `LOG_FILE="custom.log"`,则使用指定的文件名 ## 常见问题 ### Q: 提示"JAR文件不存在" **A**: - 如果使用自动检测模式(`JAR_NAME=""`),确保当前目录下有且仅有一个JAR文件 - 如果指定了JAR文件名,检查`JAR_NAME`配置是否正确,确保JAR文件在脚本同一目录下 ### Q: 提示"当前目录下有多个JAR文件" **A**: 当目录下有多个JAR文件时,脚本会显示选择菜单,按提示输入对应的序号即可选择要启动的JAR文件。你也可以在脚本中明确指定`JAR_NAME`,例如:`JAR_NAME="my-app.jar"` ### Q: 应用启动失败 **A**: 查看`app.log`日志文件,检查具体错误原因。 ### Q: 无法停止应用 **A**: 脚本会先尝试优雅停止,30秒后自动强制停止。 ## 系统要求 - Linux操作系统 - Bash Shell - Java运行环境 ## 注意事项 1. 确保脚本有执行权限 2. 确保Java环境已正确安装 3. 确保JAR文件路径正确 4. 建议在生产环境使用前先在测试环境验证 5. 定期检查日志文件大小,避免占用过多磁盘空间 ## 示例 ### 示例1: 自动检测模式(推荐) 如果你的目录下只有一个JAR文件,可以使用自动检测模式: 1. 保持脚本配置为默认: ```bash JAR_NAME="" # 留空,自动检测 ``` 2. 启动应用: ```bash # 启动应用 ./restart-java-app start # 重启应用 ./restart-java-app restart ``` 脚本会自动检测并使用目录下唯一的JAR文件。 ### 示例2: 指定JAR文件名 假设你有一个名为`my-app.jar`的Spring Boot应用: 1. 修改脚本配置: ```bash JAR_NAME="my-app.jar" ``` 2. 使用不同方式启动: ```bash # 启动应用 ./restart-java-app start # 重启应用 ./restart-java-app restart # 停止应用 ./restart-java-app stop ``` 3. 查看状态: ```bash ./restart-java-app status ``` ### 示例3: 多JAR文件选择 当目录下有多个JAR文件时,脚本会提供交互式选择: ```bash # 启动脚本,会显示选择菜单 ./restart-java-app 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包时,脚本会自动切换到批量操作模式。 输出示例: ``` 检测到多个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参数: (使用默认设置) 日志文件: log/my-api-service/20240115_143025.log ✓ 应用启动成功 (PID: 12345) 日志文件: log/my-api-service/20240115_143025.log ``` ```