四零语境后端代码仓库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

265 lines
7.0 KiB

  1. # Java应用启动脚本使用说明
  2. ## 概述
  3. `restart-java-app.sh` 是一个功能强大的Java应用管理脚本,支持启动、停止、重启和状态查看等操作。脚本支持单个JAR包操作和多JAR包批量操作,提供灵活的JAR包昵称匹配功能。
  4. ## 主要功能
  5. -**自动JAR包检测** - 当目录中只有一个JAR包时自动选择
  6. -**多JAR包选择** - 当目录中有多个JAR包时提供交互式选择菜单
  7. -**多JAR包批量操作** - 支持通过昵称同时操作多个JAR包
  8. -**模糊匹配** - 支持通过昵称模糊匹配JAR文件名
  9. -**全量操作** - 支持使用'all'参数操作所有JAR包
  10. -**进程管理** - 自动管理应用进程的启动和停止
  11. -**日志管理** - 自动生成基于JAR包名和时间戳的日志文件
  12. -**状态监控** - 实时查看应用运行状态
  13. -**优雅停止** - 先尝试正常停止,必要时强制终止
  14. ## 配置参数
  15. 在使用脚本前,需要修改脚本开头的配置参数:
  16. ```bash
  17. # ========================================
  18. # 配置参数 - 请根据实际情况修改
  19. # ========================================
  20. JAR_NAME="" # JAR包名称(留空则自动检测)
  21. ```
  22. ### 主要配置项
  23. | 参数 | 说明 | 示例 |
  24. |------|------|------|
  25. | `JAR_NAME` | JAR包文件名(留空可自动检测) | `"my-spring-boot-app.jar"``""` |
  26. **自动检测功能**: 如果将 `JAR_NAME` 留空(`JAR_NAME=""`),脚本会自动检测当前目录下的JAR文件:
  27. - 如果只有一个JAR文件,自动使用该文件
  28. - 如果有多个JAR文件,会显示选择菜单让用户选择具体的JAR文件
  29. - 如果没有JAR文件,会提示错误
  30. ### 可选配置项
  31. | 参数 | 说明 | 默认值 |
  32. |------|------|--------|
  33. | `JAVA_OPTS` | JVM启动参数 | `""` (空值,使用JVM默认设置,节省内存) |
  34. | `LOG_FILE` | 日志文件名(留空则自动生成) | `""` |
  35. | `PID_FILE` | PID文件名 | `"app.pid"` |
  36. ## 使用方法
  37. ### 1. 设置执行权限
  38. ```bash
  39. chmod +x restart-java-app.sh
  40. ```
  41. ### 2. 基本用法
  42. ```bash
  43. # 重启应用(默认操作)
  44. ./restart-java-app.sh
  45. # 或者明确指定重启
  46. ./restart-java-app.sh restart
  47. ```
  48. ### 3. 其他命令
  49. ```bash
  50. # 启动应用
  51. ./restart-java-app.sh start
  52. # 停止应用
  53. ./restart-java-app.sh stop
  54. # 查看应用状态
  55. ./restart-java-app.sh status
  56. # 显示帮助信息
  57. ./restart-java-app.sh help
  58. ```
  59. ## 命令详解
  60. ### start - 启动应用
  61. - 检查JAR文件是否存在
  62. - 启动Java应用
  63. - 等待应用完全启动
  64. - 验证应用启动状态
  65. ### stop - 停止应用
  66. - 查找应用进程PID
  67. - 发送TERM信号优雅停止
  68. - 等待最多30秒
  69. - 超时后强制停止(KILL信号)
  70. - 清理PID文件
  71. ### restart - 重启应用
  72. - 先执行stop操作
  73. - 等待2秒
  74. - 再执行start操作
  75. ### status - 查看状态
  76. - 显示应用运行状态
  77. - 显示进程PID
  78. ## 输出说明
  79. 脚本使用彩色输出来区分不同类型的消息:
  80. - 🔴 **红色**: 错误信息
  81. - 🟢 **绿色**: 成功信息
  82. - 🟡 **黄色**: 警告信息
  83. - 🔵 **蓝色**: 操作信息
  84. ## 文件说明
  85. 脚本运行时会创建以下文件:
  86. - **日志文件**: 自动生成,存储在 `log/{JAR包名}/` 目录下,格式为 `{JAR包名}_{启动时间}.log`
  87. - **PID文件**: `app.pid` - 应用进程PID文件
  88. ### 日志文件命名规则
  89. - **自动生成模式**(推荐):当 `LOG_FILE=""` 时,系统会自动生成日志文件名和路径
  90. - **目录结构**: `log/{JAR包名称}/`
  91. - **文件格式**: `{JAR包名称}_{年月日_时分秒}.log`
  92. - **示例**:
  93. - JAR包:`my-spring-boot-app.jar`
  94. - 启动时间:2024年1月15日 14:30:25
  95. - 日志文件路径:`log/my-spring-boot-app/my-spring-boot-app_20240115_143025.log`
  96. - **目录自动创建**:脚本会自动创建 `log/{JAR包名}/` 目录结构
  97. - **手动指定**:如果在脚本中设置了 `LOG_FILE="custom.log"`,则使用指定的文件名
  98. ## 常见问题
  99. ### Q: 提示"JAR文件不存在"
  100. **A**:
  101. - 如果使用自动检测模式(`JAR_NAME=""`),确保当前目录下有且仅有一个JAR文件
  102. - 如果指定了JAR文件名,检查`JAR_NAME`配置是否正确,确保JAR文件在脚本同一目录下
  103. ### Q: 提示"当前目录下有多个JAR文件"
  104. **A**: 当目录下有多个JAR文件时,脚本会显示选择菜单,按提示输入对应的序号即可选择要启动的JAR文件。你也可以在脚本中明确指定`JAR_NAME`,例如:`JAR_NAME="my-app.jar"`
  105. ### Q: 应用启动失败
  106. **A**: 查看`app.log`日志文件,检查具体错误原因。
  107. ### Q: 无法停止应用
  108. **A**: 脚本会先尝试优雅停止,30秒后自动强制停止。
  109. ## 系统要求
  110. - Linux操作系统
  111. - Bash Shell
  112. - Java运行环境
  113. ## 注意事项
  114. 1. 确保脚本有执行权限
  115. 2. 确保Java环境已正确安装
  116. 3. 确保JAR文件路径正确
  117. 4. 建议在生产环境使用前先在测试环境验证
  118. 5. 定期检查日志文件大小,避免占用过多磁盘空间
  119. ## 示例
  120. ### 示例1: 自动检测模式(推荐)
  121. 如果你的目录下只有一个JAR文件,可以使用自动检测模式:
  122. 1. 保持脚本配置为默认:
  123. ```bash
  124. JAR_NAME="" # 留空,自动检测
  125. ```
  126. 2. 启动应用:
  127. ```bash
  128. # 启动应用
  129. ./restart-java-app.sh start
  130. # 重启应用
  131. ./restart-java-app.sh restart
  132. ```
  133. 脚本会自动检测并使用目录下唯一的JAR文件。
  134. ### 示例2: 指定JAR文件名
  135. 假设你有一个名为`my-app.jar`的Spring Boot应用:
  136. 1. 修改脚本配置:
  137. ```bash
  138. JAR_NAME="my-app.jar"
  139. ```
  140. 2. 使用不同方式启动:
  141. ```bash
  142. # 启动应用
  143. ./restart-java-app.sh start
  144. # 重启应用
  145. ./restart-java-app.sh restart
  146. # 停止应用
  147. ./restart-java-app.sh stop
  148. ```
  149. 3. 查看状态:
  150. ```bash
  151. ./restart-java-app.sh status
  152. ```
  153. ### 示例3: 多JAR文件选择
  154. 当目录下有多个JAR文件时,脚本会提供交互式选择:
  155. ```bash
  156. # 启动脚本,会显示选择菜单
  157. ./restart-java-app.sh start
  158. ```
  159. ## 交互式JAR包选择
  160. 当脚本检测到多个JAR文件时,会提供交互式选择界面:
  161. ```bash
  162. 检测到多个JAR文件,请选择要启动的应用:
  163. [1] user-service-1.0.0.jar
  164. [2] order-service-1.0.0.jar
  165. [3] payment-service-1.0.0.jar
  166. 输入选项:
  167. - 单个序号: 1 (选择第1个JAR包)
  168. - 多个序号: 1,3,5 或 1 3 5 (选择多个JAR包)
  169. - 全部选择: all (选择所有JAR包)
  170. 请输入选择:
  171. ```
  172. **支持的输入格式:**
  173. - `1` - 选择单个JAR包
  174. - `1,3,5` - 选择多个JAR包(逗号分隔)
  175. - `1 3 5` - 选择多个JAR包(空格分隔)
  176. - `all` - 选择所有JAR包
  177. 选择多个JAR包时,脚本会自动切换到批量操作模式。
  178. 输出示例:
  179. ```
  180. 检测到多个JAR文件,请选择要启动的应用:
  181. [1] my-web-app.jar
  182. [2] my-api-service.jar
  183. [3] my-batch-job.jar
  184. 请输入序号 (1-3): 2
  185. ✓ 已选择: my-api-service.jar
  186. 正在启动应用...
  187. JAR包: my-api-service.jar
  188. JVM参数: (使用默认设置)
  189. 日志文件: log/my-api-service/my-api-service_20240115_143025.log
  190. ✓ 应用启动成功 (PID: 12345)
  191. 日志文件: log/my-api-service/my-api-service_20240115_143025.log
  192. ```