# Net8QuartzUI **Repository Path**: gitmy/net8-quartz-ui ## Basic Information - **Project Name**: Net8QuartzUI - **Description**: .Net8+GZY.Quartz.MUI 快速集成轻量化定时任务界面 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-12-25 - **Last Updated**: 2025-12-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Net8QuartzUI - Quartz 定时任务管理平台 基于 .NET 8.0 和 GZY.Quartz.MUI 构建的 Quartz 定时任务可视化管理平台,提供友好的 Web UI 界面来管理和监控定时任务。 ## 🚀 快速开始 1. **启动项目**:`dotnet run` 2. **访问界面**:打开浏览器访问 `http://localhost:5072/QuartzUI` 3. **添加任务**:点击界面上的 **"添加任务"** 按钮,填写任务信息并配置触发器 4. **启动任务**:在任务列表中点击 **"启动"** 按钮 > 📖 **详细使用说明**:请查看下方的 [使用指南](#使用指南) 部分 ## 📋 目录 - [功能特性](#功能特性) - [技术栈](#技术栈) - [环境要求](#环境要求) - [快速开始](#快速开始) - [界面展示](#界面展示) 🖼️ - [项目结构](#项目结构) - [配置说明](#配置说明) - [使用指南](#使用指南) - [创建自定义任务](#创建自定义任务) - [添加任务实操手册](#添加任务实操手册) ⭐ **新手必读** - [常见问题](#常见问题) ## ✨ 功能特性 - 🎯 **可视化任务管理**:通过 Web UI 界面创建、编辑、删除定时任务 - 📊 **任务监控**:实时查看任务执行状态和历史记录 - 🔄 **多种任务类型**:支持 DLL 类型任务和 Web API 类型任务 - ⏰ **灵活调度**:支持 Cron 表达式和简单触发器配置 - 📝 **执行日志**:详细记录任务执行过程和结果 - 🛠️ **易于扩展**:简单实现接口即可添加新的定时任务 ## 🛠️ 技术栈 - **.NET 8.0** - 开发框架 - **GZY.Quartz.MUI 2.8.1** - Quartz UI 管理组件 - **Quartz.NET 3.4.0** - 定时任务调度框架 - **ASP.NET Core Web API** - Web API 框架 - **Swagger/OpenAPI** - API 文档 ## 📦 环境要求 - .NET 8.0 SDK 或更高版本 - Visual Studio 2022 或 VS Code(推荐) - Windows / Linux / macOS ## 🚀 快速开始 ### 1. 克隆或下载项目 ```bash git clone https://gitee.com/xianyouhu/net8-quartz-ui.git cd Net8QuartzUI ``` ### 2. 还原 NuGet 包 ```bash dotnet restore ``` ### 3. 运行项目 ```bash dotnet run ``` 或者使用 Visual Studio: - 按 `F5` 启动调试 - 或按 `Ctrl+F5` 启动不调试 ### 4. 访问应用 项目启动后,访问以下地址: - **Quartz UI 管理界面**:`http://localhost:5072/QuartzUI` 或 `https://localhost:7026/QuartzUI` - **Swagger API 文档**:`http://localhost:5072/swagger` 或 `https://localhost:7026/swagger` - **示例 API**:`http://localhost:5072/WeatherForecast` ## 🖼️ 界面展示 ### Quartz UI 管理界面 Quartz UI 提供了直观友好的任务管理界面,可以轻松创建、管理和监控定时任务。 ![Quartz UI 管理界面](./READMEIMGS/Quartz界面.png) **主要功能**: - 📋 任务列表展示:查看所有已创建的任务及其状态 - ➕ 添加任务:快速创建新的定时任务 - ⚙️ 任务管理:启动、暂停、删除、编辑任务 - 📊 执行记录:查看任务执行历史和日志 - 🔍 任务搜索:快速查找特定任务 ### Swagger UI 与 QuartzUI 集成 Swagger UI 界面中集成了 QuartzUI 快速访问链接,方便在 API 文档和管理界面之间切换。 ![Swagger UI 与 QuartzUI 集成](./READMEIMGS/swagger-quartzui.png) **特性**: - 🔗 快速链接:右上角提供 QuartzUI 管理界面直达链接 - 📖 API 文档:完整的 API 接口文档和测试功能 - 🎨 美观界面:现代化的 UI 设计 ### 添加 DLL 类型任务 创建 DLL 类型任务时,只需填写任务类名和相关配置即可。 ![添加 DLL 任务](./READMEIMGS/addDll.png) **配置项**: - 📝 任务名称和组:标识和分类任务 - 🔧 任务类型:选择 DLL 类型 - 📦 任务类名:输入完整的类名(包含命名空间) - ⏰ 触发器配置:设置任务执行时间和频率 - 📄 任务参数:可选的 JSON 格式参数 ## 📁 项目结构 ``` Net8QuartzUI/ ├── Controllers/ # API 控制器 │ └── WeatherForecastController.cs ├── Jobs/ # 定时任务目录 │ └── SampleJob.cs # 示例任务 ├── Properties/ # 项目属性 │ └── launchSettings.json # 启动配置 ├── Program.cs # 应用程序入口(已配置 Quartz) ├── appsettings.json # 应用配置文件 ├── appsettings.Development.json # 开发环境配置 ├── Net8QuartzUI.csproj # 项目文件 └── README.md # 项目说明文档 ``` ## ⚙️ 配置说明 ### appsettings.json 项目已包含基本的 Quartz 配置: ```json { "Quartz": { "Scheduler": { "InstanceName": "Net8QuartzUI" }, "ThreadPool": { "Type": "Quartz.Simpl.SimpleThreadPool, Quartz", "ThreadPriority": "Normal", "ThreadCount": 10 }, "Plugin": { "JobInitializer": { "Type": "Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin, Quartz.Plugins", "FileNames": "quartz_jobs.xml" } } } } ``` #### 配置项详细说明 **1. Scheduler(调度器配置)** ```json "Scheduler": { "InstanceName": "Net8QuartzUI" } ``` - **InstanceName(实例名称)**: - 作用:为 Quartz 调度器指定一个唯一标识名称 - 用途: - 在集群环境中区分不同的调度器实例 - 日志记录和监控时用于标识 - 便于调试和问题排查 - 建议:使用有意义的名称,如项目名称或环境标识 **2. ThreadPool(线程池配置)** ```json "ThreadPool": { "Type": "Quartz.Simpl.SimpleThreadPool, Quartz", "ThreadPriority": "Normal", "ThreadCount": 10 } ``` - **Type(线程池类型)**: - 作用:指定使用的线程池实现类 - 值:`Quartz.Simpl.SimpleThreadPool, Quartz` 是 Quartz 内置的简单线程池 - 说明:Quartz 使用线程池来并发执行多个任务 - **ThreadPriority(线程优先级)**: - 作用:设置线程池中线程的优先级 - 可选值: - `Lowest`:最低优先级 - `BelowNormal`:低于正常 - `Normal`:正常优先级(推荐) - `AboveNormal`:高于正常 - `Highest`:最高优先级 - 建议:通常使用 `Normal`,除非有特殊性能需求 - **ThreadCount(线程数量)**: - 作用:设置线程池中可用的线程数量 - 说明: - 这个值决定了**同时可以执行多少个任务** - 如果任务数量超过线程数,多余的任务会排队等待 - 调优建议: - **开发环境**:5-10 个线程足够 - **生产环境**:根据任务数量和服务器性能调整 - 轻量级任务:10-20 个线程 - 重量级任务:5-10 个线程 - CPU 密集型任务:建议设置为 CPU 核心数 - I/O 密集型任务:可以设置更多(20-50) - ⚠️ **注意**:线程数过多会消耗系统资源,过少会导致任务排队 **3. Plugin(插件配置)** ```json "Plugin": { "JobInitializer": { "Type": "Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin, Quartz.Plugins", "FileNames": "quartz_jobs.xml" } } ``` - **JobInitializer(任务初始化插件)**: - 作用:从 XML 文件加载任务配置 - 说明: - 允许在应用启动时从 XML 文件自动加载任务定义 - 适合需要预定义任务的场景 - **FileNames**:指定 XML 配置文件的路径 - ⚠️ **注意**: - 如果使用 GZY.Quartz.MUI 的 UI 界面管理任务,这个插件可能不是必需的 - 任务可以通过 UI 界面动态创建和管理 - 如果不需要从 XML 加载任务,可以删除此配置 #### 配置建议 **开发环境配置:** ```json { "Quartz": { "Scheduler": { "InstanceName": "Net8QuartzUI-Dev" }, "ThreadPool": { "Type": "Quartz.Simpl.SimpleThreadPool, Quartz", "ThreadPriority": "Normal", "ThreadCount": 5 } } } ``` **生产环境配置:** ```json { "Quartz": { "Scheduler": { "InstanceName": "Net8QuartzUI-Prod" }, "ThreadPool": { "Type": "Quartz.Simpl.SimpleThreadPool, Quartz", "ThreadPriority": "Normal", "ThreadCount": 20 } } } ``` **性能调优提示:** - 📊 监控任务执行情况,如果经常有任务排队,考虑增加 `ThreadCount` - 🔍 观察 CPU 和内存使用率,如果资源充足,可以适当增加线程数 - ⚡ 如果任务执行时间很短,可以设置更多线程以提高并发度 - 🐌 如果任务执行时间很长,建议减少线程数,避免资源竞争 ### 数据存储位置 GZY.Quartz.MUI 使用本地文件存储任务配置和执行日志: ``` 项目根目录/ └── QuartzSettings/ # 数据存储目录 ├── task_job.json # 任务配置文件(所有任务信息) └── logs/ # 日志目录 └── logs.txt # 执行日志文件(所有任务执行记录) ``` **文件说明:** 1. **task_job.json** - 任务配置存储 - 存储所有创建的任务配置 - 包括:任务名称、任务组、触发器、参数等 - JSON 数组格式,每个任务一个对象 2. **logs/logs.txt** - 执行日志存储 - 存储所有任务的执行记录 - 包括:执行时间、执行状态、执行结果、耗时等 - 每行一条 JSON 记录 **注意事项:** - 📁 这些文件会在首次创建任务时自动生成 - 💾 建议定期备份 `QuartzSettings` 文件夹 - 🚫 不要手动编辑这些文件,可能导致数据损坏 - 🔒 生产环境建议配置数据库持久化(需要额外配置) ### Program.cs 配置 项目已配置以下服务: ```csharp // 配置 Quartz UI builder.Services.AddQuartzUI(); builder.Services.AddQuartzClassJobs(); // 添加本地调度任务访问 // 注册定时任务 builder.Services.AddSingleton(); // 启用 Quartz 中间件 app.UseQuartz(); ``` #### 启用基础授权(可选) 如果需要为 Quartz UI 管理界面启用基础授权,在 `app.UseQuartz();` **上方**添加 `app.UseQuartzUIBasicAuthorized();`: ```csharp // 授权中间件 app.UseAuthorization(); // 启用 Quartz UI 基础授权(必须在 UseQuartz 之前) app.UseQuartzUIBasicAuthorized(); // 启用 Quartz 中间件(必须添加才能访问 QuartzUI 界面) app.UseQuartz(); ``` > 📖 **详细说明**:请查看 [授权配置说明.md](./授权配置说明.md) 了解完整的授权配置和使用方法。 ## 📖 使用指南 ### 1. 访问 Quartz UI 管理界面 #### 步骤 1:启动项目 在项目根目录下运行: ```bash dotnet run ``` 或者使用 Visual Studio 按 `F5` 启动项目。 #### 步骤 2:打开浏览器访问 项目启动成功后,在浏览器地址栏输入: ``` http://localhost:5072/QuartzUI ``` 或者使用 HTTPS: ``` https://localhost:7026/QuartzUI ``` > **注意**:如果端口被占用,请查看控制台输出的实际端口号,或检查 `Properties/launchSettings.json` 中的端口配置。 #### 步骤 3:确认界面加载成功 成功访问后,您应该能看到 Quartz UI 管理界面,通常包含: - 顶部导航栏(任务列表、添加任务等菜单) - 任务列表表格(显示已创建的任务) - 操作按钮区域 > **💡 快速提示**:如果无法访问界面,请确保: > - 项目已成功启动(查看控制台输出) > - 端口号正确(默认是 5072 或 7026) > - 防火墙没有阻止访问 > - 浏览器控制台没有报错 ### 2. 在界面中添加定时任务 #### 方式一:创建 DLL 类型任务(推荐) **详细操作步骤:** 1. **找到添加任务按钮** - 在 Quartz UI 界面顶部或任务列表上方,找到 **"添加任务"**、**"新建任务"** 或 **"+"** 按钮 - 点击该按钮,会弹出任务创建对话框或打开新页面 2. **填写基本信息** 在任务创建表单中,依次填写以下字段: | 字段名称 | 说明 | 示例值 | 是否必填 | |---------|------|--------|---------| | **任务名称 (Job Name)** | 给任务起一个易于识别的名称 | `SampleJob` 或 `数据同步任务` | ✅ 必填 | | **任务组 (Job Group)** | 任务所属的组,用于分类管理 | `Default` 或 `DataSync` | ✅ 必填 | | **任务类型 (Job Type)** | 选择任务类型 | 选择 `DLL` | ✅ 必填 | | **任务类名 (Class Name)** | 完整的类名(包含命名空间) | `Net8QuartzUI.Jobs.SampleJob` | ✅ 必填 | | **任务参数 (Job Data)** | 传递给任务的参数(JSON 格式) | `{"key":"value"}` 或留空 | ⭕ 可选 | | **任务描述 (Description)** | 任务的描述信息 | `这是一个示例任务` | ⭕ 可选 | **重要提示**: - 任务类名必须与代码中的类名完全一致,包括命名空间 - 任务类必须在 `Program.cs` 中注册为服务 - 任务参数必须是有效的 JSON 格式字符串 3. **配置触发器 (Trigger)** 触发器决定了任务何时执行,需要配置以下信息: **选择触发器类型:** - **Cron 触发器**:使用 Cron 表达式,适合复杂的调度需求 - **Simple 触发器**:简单的重复执行,适合固定间隔执行 **如果选择 Cron 触发器:** | 字段 | 说明 | 示例 | |------|------|------| | **Cron 表达式** | 标准的 Cron 表达式 | `0/5 * * * * ?` (每5秒) | | **触发器名称** | 触发器的名称 | `SampleJobTrigger` | | **触发器组** | 触发器所属的组 | `Default` | | **开始时间** | 任务开始执行的时间 | 留空表示立即开始 | | **结束时间** | 任务停止执行的时间 | 留空表示不限制 | **如果选择 Simple 触发器:** | 字段 | 说明 | 示例 | |------|------|------| | **重复次数** | `-1` 表示无限重复,`0` 表示执行一次,`>0` 表示重复指定次数 | `-1` | | **重复间隔 (毫秒)** | 每次执行之间的间隔时间(单位:毫秒) | `5000` (5秒) | | **触发器名称** | 触发器的名称 | `SampleJobTrigger` | | **触发器组** | 触发器所属的组 | `Default` | 4. **保存任务** - 检查所有必填字段是否已填写 - 确认 Cron 表达式或触发器配置正确 - 点击表单底部的 **"保存"**、**"确定"** 或 **"提交"** 按钮 - 如果保存成功,任务会出现在任务列表中 5. **启动任务** - 在任务列表中找到刚创建的任务 - 点击任务行的 **"启动"** 或 **"运行"** 按钮 - 任务状态会变为 **"运行中"** 或 **"正常"** **完整示例:创建一个每 10 秒执行一次的示例任务** 1. 点击 **"添加任务"** 按钮 2. 填写信息: - 任务名称:`SampleJob` - 任务组:`Default` - 任务类型:选择 `DLL` - 任务类名:`Net8QuartzUI.Jobs.SampleJob` - 任务参数:留空或填写 `{"message":"Hello Quartz"}` 3. 配置触发器: - 触发器类型:选择 `Cron` - Cron 表达式:`0/10 * * * * ?` - 触发器名称:`SampleJobTrigger` - 触发器组:`Default` 4. 点击 **"保存"** 按钮 5. 在任务列表中找到该任务,点击 **"启动"** 按钮 > **⚠️ 常见错误提示**: > - 如果提示"找不到任务类",请检查: > - 类名是否正确(包含完整命名空间) > - 是否在 `Program.cs` 中注册了该任务服务 > - 项目是否已重新编译 > - 如果任务保存后无法启动,请检查: > - Cron 表达式是否正确 > - 触发器配置是否完整 #### 方式二:创建 Web API 类型任务 **详细操作步骤:** 1. **点击添加任务按钮** - 在 Quartz UI 界面中,点击 **"添加任务"** 按钮 2. **填写任务信息** | 字段名称 | 说明 | 示例值 | 是否必填 | |---------|------|--------|---------| | **任务名称** | 给任务起一个名称 | `ApiCallJob` | ✅ 必填 | | **任务组** | 任务所属的组 | `Default` | ✅ 必填 | | **任务类型** | 选择任务类型 | 选择 `API` 或 `HTTP` | ✅ 必填 | | **请求地址 (URL)** | 要调用的 API 完整地址 | `http://localhost:5072/WeatherForecast` | ✅ 必填 | | **请求方式 (Method)** | HTTP 请求方法 | 选择 `GET`、`POST`、`PUT`、`DELETE` 等 | ✅ 必填 | | **请求头 (Headers)** | HTTP 请求头(JSON 格式) | `{"Content-Type":"application/json","Authorization":"Bearer token"}` | ⭕ 可选 | | **请求体 (Body)** | POST/PUT 请求的请求体 | `{"key":"value"}` | ⭕ 可选(POST/PUT 时建议填写) | | **超时时间 (Timeout)** | 请求超时时间(毫秒) | `30000` (30秒) | ⭕ 可选 | 3. **配置触发器** - 触发器配置与 DLL 类型任务相同 - 选择 Cron 触发器或 Simple 触发器 - 填写相应的触发器配置 4. **保存并启动任务** - 点击 **"保存"** 按钮 - 在任务列表中启动该任务 **完整示例:创建一个每分钟调用一次 API 的任务** 1. 点击 **"添加任务"** 按钮 2. 填写信息: - 任务名称:`WeatherApiJob` - 任务组:`Default` - 任务类型:选择 `API` - 请求地址:`http://localhost:5072/WeatherForecast` - 请求方式:选择 `GET` - 请求头:留空或填写 `{"Accept":"application/json"}` 3. 配置触发器: - 触发器类型:选择 `Cron` - Cron 表达式:`0 * * * * ?` (每分钟执行一次) 4. 点击 **"保存"** 按钮 5. 启动任务 ### 3. 管理任务 在任务列表中,您可以: - **启动任务**:点击任务行的 **"启动"** 按钮 - **暂停任务**:点击任务行的 **"暂停"** 按钮 - **删除任务**:点击任务行的 **"删除"** 按钮 - **编辑任务**:点击任务行的 **"编辑"** 按钮修改任务配置 - **立即执行**:点击任务行的 **"立即执行"** 按钮手动触发一次执行 ### 4. 查看执行记录 1. 在任务列表中,点击任务行的 **"执行记录"** 或 **"日志"** 按钮 2. 查看任务的执行历史: - 执行时间 - 执行状态(成功/失败) - 执行结果 - 错误信息(如果有) ### 5. Cron 表达式示例 | 说明 | Cron 表达式 | |------|------------| | 每 5 秒执行一次 | `0/5 * * * * ?` | | 每 10 秒执行一次 | `0/10 * * * * ?` | | 每分钟执行一次 | `0 * * * * ?` | | 每 5 分钟执行一次 | `0 */5 * * * ?` | | 每小时执行一次 | `0 0 * * * ?` | | 每天凌晨 2 点执行 | `0 0 2 * * ?` | | 每天上午 9 点执行 | `0 0 9 * * ?` | | 每周一上午 9 点执行 | `0 0 9 ? * MON` | | 每月 1 号凌晨 0 点执行 | `0 0 0 1 * ?` | | 每年 1 月 1 号凌晨 0 点执行 | `0 0 0 1 1 ?` | **Cron 表达式格式说明**: ``` 秒 分 时 日 月 周 [年] * 表示所有值 ? 表示不指定值(仅用于日和周) - 表示区间,如 10-12 , 表示列举,如 MON,WED,FRI / 表示增量,如 0/5 表示从 0 开始每 5 个单位 ``` ## 📖 添加任务实操手册 **新手必读!** 详细的步骤指南,手把手教您如何添加新的定时任务。 👉 **[查看完整实操手册](./添加任务实操手册.md)** 手册包含: - ✅ 详细的步骤说明(创建任务类 → 注册服务 → UI 配置) - ✅ 完整的代码示例和模板 - ✅ 任务参数使用方法 - ✅ 常见问题解答 - ✅ 快速检查清单 - ✅ 最佳实践和注意事项 --- ## 🔧 创建自定义任务 ### 步骤 1:创建任务类 在 `Jobs` 目录下创建新的 C# 类文件,例如 `MyCustomJob.cs`: ```csharp using GZY.Quartz.MUI.BaseService; namespace Net8QuartzUI.Jobs { /// /// 自定义定时任务 /// public class MyCustomJob : IJobService { private readonly ILogger _logger; public MyCustomJob(ILogger logger) { _logger = logger; } /// /// 执行定时任务 /// /// 任务参数(JSON 字符串) /// 执行结果 public string ExecuteService(string parameter) { try { _logger.LogInformation("MyCustomJob 执行开始,参数:{Parameter}", parameter); // 解析参数(如果需要) // var param = JsonSerializer.Deserialize(parameter); // 在此处添加您的业务逻辑 Console.WriteLine($"[QuartzUI] MyCustomJob 执行 - 参数:{parameter} - 时间:{DateTime.Now:yyyy-MM-dd HH:mm:ss}"); // 示例:发送邮件、清理数据、生成报表等 // await SendEmailAsync(); // await CleanupDataAsync(); // await GenerateReportAsync(); _logger.LogInformation("MyCustomJob 执行完成"); return "任务执行成功"; } catch (Exception ex) { _logger.LogError(ex, "MyCustomJob 执行失败"); return $"任务执行失败:{ex.Message}"; } } } } ``` ### 步骤 2:注册任务服务 在 `Program.cs` 中注册新创建的任务: ```csharp // 注册定时任务 builder.Services.AddSingleton(); builder.Services.AddSingleton(); // 添加新任务 ``` ### 步骤 3:在 UI 中使用 1. 启动项目 2. 访问 Quartz UI 管理界面 3. 创建新任务时,选择任务类型为 `DLL` 4. 输入任务类名:`Net8QuartzUI.Jobs.MyCustomJob` 5. 配置触发器和参数 6. 保存并启动任务 ### 任务参数示例 如果您的任务需要接收参数,可以在创建任务时传入 JSON 格式的参数: ```json { "email": "user@example.com", "subject": "定时报告", "data": { "key": "value" } } ``` 在任务类中解析参数: ```csharp using System.Text.Json; public string ExecuteService(string parameter) { if (!string.IsNullOrEmpty(parameter)) { var param = JsonSerializer.Deserialize>(parameter); // 使用参数 } // ... } ``` ## ❓ 常见问题 ### Q1: 无法访问 Quartz UI 界面? **A:** 请检查: 1. 项目是否成功启动 2. 端口是否正确(默认 `http://localhost:5072`) 3. 是否在 `Program.cs` 中正确配置了 `app.UseQuartz()` 4. 浏览器控制台是否有错误信息 ### Q2: 任务类找不到? **A:** 请确保: 1. 任务类实现了 `IJobService` 接口 2. 任务类已在 `Program.cs` 中注册为服务 3. 任务类名输入正确(包含完整命名空间) 4. 项目已重新编译 ### Q3: 任务不执行? **A:** 请检查: 1. 任务是否已启动(状态为运行中) 2. Cron 表达式是否正确 3. 系统时间是否正确 4. 查看任务执行记录中的错误信息 ### Q4: 如何查看任务执行日志? **A:** 可以通过以下方式查看: 1. 在 Quartz UI 界面中查看任务的执行记录 2. 查看应用程序的控制台输出 3. 查看应用程序的日志文件(如果配置了文件日志) ### Q8: 任务和日志数据保存在哪里? **A:** GZY.Quartz.MUI 使用本地文件存储数据,具体位置如下: **任务配置存储:** - 文件路径:`QuartzSettings/task_job.json` - 存储内容:所有创建的任务配置信息(任务名称、触发器、参数等) - 文件格式:JSON 格式,每个任务一条记录 **执行日志存储:** - 文件路径:`QuartzSettings/logs/logs.txt` - 存储内容:所有任务的执行记录(执行时间、状态、结果等) - 文件格式:每行一条 JSON 记录 **存储位置说明:** - 开发环境:数据文件存储在项目根目录的 `QuartzSettings` 文件夹中 - 运行环境:数据文件存储在应用程序运行目录的 `QuartzSettings` 文件夹中(通常是 `bin/Debug/net8.0/QuartzSettings` 或 `bin/Release/net8.0/QuartzSettings`) **重要提示:** - ⚠️ **备份数据**:建议定期备份 `QuartzSettings` 文件夹,避免数据丢失 - ⚠️ **不要手动删除**:删除这些文件会导致任务配置和执行记录丢失 - ⚠️ **版本控制**:建议将 `QuartzSettings` 文件夹添加到 `.gitignore`,避免将任务配置提交到代码仓库 ### Q5: 如何停止所有任务? **A:** 在 Quartz UI 界面中: 1. 找到需要停止的任务 2. 点击任务行的 **"暂停"** 按钮 3. 或者直接删除任务 ### Q6: 任务执行失败怎么办? **A:** 1. 查看任务执行记录中的错误信息 2. 检查任务代码中是否有异常处理 3. 查看应用程序日志获取详细错误信息 4. 确保任务依赖的服务或资源可用 ### Q7: 如何修改任务执行频率? **A:** 1. 在 Quartz UI 界面中找到任务 2. 点击 **"编辑"** 按钮 3. 修改触发器配置(Cron 表达式或简单触发器) 4. 保存更改 ## 📚 相关资源 - [Quartz.NET 官方文档](https://www.quartz-scheduler.net/) - [GZY.Quartz.MUI GitHub](https://github.com/your-repo)(如果可用) - [Cron 表达式生成器](https://cron.qqe2.com/) - [.NET 8.0 官方文档](https://learn.microsoft.com/zh-cn/dotnet/core/) ## 📝 许可证 本项目采用 MIT 许可证。 ## 🤝 贡献 欢迎提交 Issue 和 Pull Request! --- **注意**:使用本平台时,请确保: - 任务代码经过充分测试 - 避免在任务中执行长时间阻塞操作 - 合理设置任务执行频率,避免对系统造成过大压力 - 定期备份任务配置 如有问题或建议,欢迎反馈!