# jar-watcher **Repository Path**: ismartyx/jar-watcher ## Basic Information - **Project Name**: jar-watcher - **Description**: 自动监控指定目录中的 Java JAR 文件,检测到文件变化后自动重启对应的 Java 进程,并提供 Web 界面实时查看各应用的运行日志。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-20 - **Last Updated**: 2026-05-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # JAR Watcher 自动监控指定目录中的 Java JAR 文件,检测到文件变化后自动重启对应的 Java 进程,并提供 Web 界面实时查看各应用的运行日志。 ## 功能特性 - **文件变化检测**:轮询监控目录(每 3 秒),通过对比文件的修改时间、创建时间、文件大小来判断是否发生变化,兼容 Windows 文件管理器的复制/替换操作 - **防抖重启**:文件变化后等待指定秒数(`restart_delay`),确认文件大小稳定后再重启,避免文件未写完就触发重启 - **自动重启**:先终止旧进程(通过 PowerShell 查找 PID),再以配置的 JVM 参数和应用参数重新启动 - **独立日志**:每次启动将 stdout/stderr 重定向到 `watch_dir/logs//<时间戳>.log`,方便追溯历史启动记录 - **Web 日志查看器**:内置 HTTP 服务,实时查看(SSE)或回溯各 JAR 的历史日志,侧边栏每 5 秒自动刷新日志列表 - **自动备份**:启动时立即备份,之后每天 00:00 将 JAR 文件和日志备份到 `watch_dir/backup/YYYY-MM-DD/`,自动清理 7 天前的旧备份 ## 目录结构 ``` watch_dir/ # 配置的监控目录,如 D:/apps/jars ├── blade-auth.jar ├── blade-gateway.jar ├── ... ├── logs/ │ ├── blade-auth/ │ │ ├── 2026-05-20_10-00-00.log │ │ └── 2026-05-20_14-30-00.log │ └── blade-gateway/ │ └── ... └── backup/ ├── 2026-05-20/ │ ├── blade-auth.jar │ └── logs/ └── 2026-05-19/ └── ... ``` ## 配置说明 编辑 `config.yaml`: ```yaml # JAR 监控目录 watch_dir: "D:/apps/jars" # Web UI 端口 web_port: 19000 # 文件变化后等待秒数(防抖) restart_delay: 5 # 应用列表 apps: - jar: "blade-auth.jar" jvm_args: [ "-Dfile.encoding=UTF-8", "-Xmx512m", "-Xms256m" ] app_args: [ "--spring.profiles.active=test" ] env: SPRING_CLOUD_NACOS_CONFIG_NAMESPACE: "test" SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE: "test" ``` | 字段 | 说明 | |-------------------|--------------------------| | `watch_dir` | JAR 文件所在目录,不存在时自动创建 | | `web_port` | Web 日志查看器端口,默认 `19000` | | `restart_delay` | 检测到变化后延迟重启的秒数,默认 `3` | | `apps[].jar` | JAR 文件名(相对于 `watch_dir`) | | `apps[].jvm_args` | 传给 `java` 的 JVM 参数 | | `apps[].app_args` | 传给应用本身的参数(在 `-jar` 之后) | | `apps[].env` | 附加的环境变量 | ## 使用方法 ### 启动 ```bat jar-watcher.exe ``` 默认读取同目录下的 `config.yaml`,可通过 `-config` 指定其他路径: ```bat jar-watcher.exe -config D:\myapp\config.yaml ``` ### 部署新版本 JAR 直接将新 JAR 文件复制到 `watch_dir`,程序会在 `restart_delay` 秒后自动重启对应服务,无需任何手动操作。 ### 查看实时日志 浏览器访问: ``` http://127.0.0.1:19000 ``` - 左侧列出所有应用及其历史日志文件,点击展开 - 点击最新日志:实时 tail(绿色「实时」状态) - 点击历史日志:加载完整历史内容(黄色「历史」状态) - 日志内容根据关键词自动着色:`ERROR` 红色、`WARN` 黄色、`INFO` 蓝色 ## 编译 需要 Go 1.18+,仅支持 Windows(使用了 Windows syscall 获取文件创建时间)。 ```powershell go build -o dist\jar-watcher.exe . ```