# 调度管理功能 - 快速上手指南

## 🚀 5分钟快速上手

### 什么是调度管理功能？

调度管理功能是一个企业级任务调度引擎，让您的AI应用能够按照预定策略自动执行，无需人工干预。

**核心价值**:
- ⏰ **自动化**: 按时间或事件自动触发任务
- 🎯 **智能化**: 优先级调度、资源优化
- 📊 **可视化**: 实时监控、一目了然
- 🔄 **可靠性**: 自动重试、7×24运行

---

## 📝 创建第一个调度规则

### 场景: 每天定时检测土壤湿度

假设您想每天早晚两次自动检测土壤湿度并生成灌溉方案。

#### 步骤1: 进入调度管理 (30秒)

```
访问路径:
AI作物模型精准决策系统 → 模型应用中心 → 调度管理
```

#### 步骤2: 创建调度规则 (2分钟)

1. 点击 **[+ 新建规则]** 按钮
2. 填写基本信息:

```
┌─────────────────────────────────────────┐
│ 规则名称: [智能灌溉定时调度_______]    │
│                                         │
│ 关联应用: [▼ 智能灌溉策略生成      ]    │
│                                         │
│ 规则描述:                               │
│ ┌─────────────────────────────────────┐ │
│ │ 每天早晚两次检测土壤湿度           │ │
│ │ 并生成最优灌溉方案                │ │
│ └─────────────────────────────────────┘ │
└─────────────────────────────────────────┘
```

3. 配置触发条件:

```
触发类型: [Cron定时 ▼]
Cron表达式: 0 6,18 * * *
说明: 每天6点和18点执行

优先级: [高 ▼]
```

4. 配置重试策略:

```
最大重试次数: [3]
重试策略: [指数退避 ▼]
超时时间: [300] 秒
```

5. 并发控制:

```
☐ 允许并发执行
```

6. 点击 **[保存]** 完成创建

✅ **完成**: 调度规则创建成功，将在明天早上6点首次执行

---

## 🎯 6种触发策略详解

### 1. Cron定时触发 ⏰

**适用场景**: 定期检测、例行任务

**配置示例**:
```yaml
触发类型: Cron定时
Cron表达式示例:
  "0 6,18 * * *"      # 每天6点和18点
  "0 */3 * * *"       # 每3小时
  "0 8 * * 1"         # 每周一早上8点
  "0 0 1 * *"         # 每月1日凌晨
  "0 0 1 1 *"         # 每年1月1日
```

**Cron表达式格式**: `分 时 日 月 周`
- 分: 0-59
- 时: 0-23
- 日: 1-31
- 月: 1-12
- 周: 0-6 (0=周日)

**常用示例**:
```
每小时: 0 * * * *
每天中午: 0 12 * * *
工作日早上: 0 9 * * 1-5
周末: 0 0 * * 0,6
```

---

### 2. 周期间隔触发 🔄

**适用场景**: 持续监控、定期更新

**配置示例**:
```yaml
触发类型: 周期间隔
间隔时间: 180 分钟
说明: 每3小时执行一次
```

**使用建议**:
- 监控任务: 5-30分钟
- 数据同步: 60-180分钟
- 报告生成: 360-1440分钟

---

### 3. 事件触发 ⚡

**适用场景**: 实时响应、数据驱动

**配置示例**:
```yaml
触发类型: 事件触发
事件类型: image_captured
说明: 新图像采集完成时触发
```

**常见事件**:
- `image_captured`: 图像采集完成
- `data_updated`: 数据更新
- `sensor_alert`: 传感器告警
- `threshold_exceeded`: 阈值超限

---

### 4. 阈值触发 📊

**适用场景**: 异常预警、智能控制

**配置示例**:
```yaml
触发类型: 阈值触发
监测指标: temperature
比较运算符: >
阈值: 35
持续时间: 10 分钟
说明: 温度超过35°C持续10分钟时触发
```

**运算符说明**:
- `>`: 大于
- `>=`: 大于等于
- `<`: 小于
- `<=`: 小于等于
- `==`: 等于
- `!=`: 不等于

---

### 5. 手动触发 👆

**适用场景**: 临时检测、测试验证

**使用方法**:
1. 进入 **调度规则** 标签
2. 找到要触发的规则
3. 点击 **[▶]** 按钮
4. 任务立即加入队列执行

**特点**:
- 无需等待定时
- 不受规则启用/禁用影响
- 适合测试和紧急情况

---

### 6. 依赖触发 🔗

**适用场景**: 任务编排、流水线

**配置示例**:
```yaml
触发类型: 依赖触发
前置任务: 数据采集任务
触发条件: 前置任务成功完成
说明: 数据采集完成后自动触发分析
```

*(当前版本预留功能)*

---

## 🎨 优先级使用指南

### 优先级说明

| 优先级 | 适用场景 | 响应时间 | 资源分配 |
|--------|----------|----------|----------|
| 紧急 | 灾害预警、紧急控制 | <5秒 | 优先保障 |
| 高 | 重要监测、关键分析 | <30秒 | 优先执行 |
| 中 | 常规检测、定期分析 | <5分钟 | 正常分配 |
| 低 | 非紧急任务、批量处理 | 资源空闲时 | 见缝插针 |

### 使用建议

**紧急优先级**:
```yaml
使用场景:
  - 温度异常预警
  - 病虫害紧急识别
  - 灾害天气预警
  - 设备故障告警

建议设置:
  优先级: 紧急
  重试策略: 立即重试
  并发: 允许
  最大并发: 3-5
```

**高优先级**:
```yaml
使用场景:
  - 智能灌溉决策
  - 实时环境监测
  - 重要数据分析
  - 关键报警

建议设置:
  优先级: 高
  重试策略: 指数退避
  并发: 根据需要
```

**中优先级**:
```yaml
使用场景:
  - 定期土壤检测
  - 施肥计划生成
  - 数据统计分析
  - 常规报告

建议设置:
  优先级: 中
  重试策略: 固定间隔
  并发: 不允许
```

**低优先级**:
```yaml
使用场景:
  - 历史数据整理
  - 批量数据导出
  - 非紧急分析
  - 后台处理

建议设置:
  优先级: 低
  重试策略: 固定间隔
  并发: 可以
```

---

## 🔄 重试策略选择

### 策略对比

| 策略 | 适用场景 | 重试间隔 | 优点 | 缺点 |
|------|----------|----------|------|------|
| 立即重试 | 网络抖动、临时故障 | 0秒 | 快速恢复 | 可能加重负担 |
| 指数退避 | 服务过载、资源竞争 | 2→4→8→16秒 | 给系统恢复时间 | 恢复较慢 |
| 固定间隔 | 定期检查、稳定间隔 | 固定30秒 | 可预测 | 不够灵活 |
| 不重试 | 一次性任务、手动干预 | - | 快速失败 | 需人工处理 |

### 使用建议

**立即重试**:
```yaml
适用:
  - 网络请求超时
  - 数据库连接断开
  - 临时资源不足

配置:
  重试策略: 立即重试
  最大重试: 2-3次
  超时时间: 较短

注意:
  ⚠️ 避免无限重试
  ⚠️ 设置最大次数
```

**指数退避** (推荐):
```yaml
适用:
  - 服务暂时不可用
  - 外部API调用
  - 资源竞争情况

配置:
  重试策略: 指数退避
  最大重试: 3-5次
  基础延迟: 2秒

优势:
  ✅ 自动调节负载
  ✅ 给系统恢复时间
  ✅ 避免雪崩
```

**固定间隔**:
```yaml
适用:
  - 等待外部系统就绪
  - 定期重试任务
  - 可预期恢复时间

配置:
  重试策略: 固定间隔
  重试间隔: 30-60秒
  最大重试: 3次
```

**不重试**:
```yaml
适用:
  - 参数错误
  - 权限不足
  - 数据格式错误
  - 业务逻辑错误

配置:
  重试策略: 不重试
  最大重试: 0

原因:
  - 重试不会解决问题
  - 需要人工干预
  - 快速失败
```

---

## 📊 监控和管理

### 查看任务执行状态

#### 1. 调度概览

```
访问: 调度管理 → 调度概览

可以看到:
  - 队列统计 (等待/运行/完成/失败)
  - 执行趋势图 (24小时)
  - 优先级分布
  - 正在执行的任务
  - 成功率统计
```

#### 2. 任务队列

```
访问: 调度管理 → 任务队列

查看:
  - 等待队列: 即将执行的任务
  - 运行队列: 正在执行的任务
  - 失败队列: 执行失败的任务

操作:
  - 取消等待任务
  - 暂停运行任务
  - 重试失败任务
```

#### 3. 执行日志

```
访问: 调度管理 → 执行日志

查询:
  - 所有历史任务
  - 按状态筛选
  - 按时间范围筛选
  - 按应用筛选

导出:
  - 导出Excel
  - 导出CSV
  - 导出PDF
```

---

### 任务控制操作

**手动触发**:
```
位置: 调度规则列表
按钮: [▶ 播放图标]
效果: 立即创建任务并加入队列
```

**暂停任务**:
```
位置: 正在执行任务
按钮: [⏸ 暂停图标]
效果: 暂停任务执行，保存当前状态
注意: 仅部分任务支持暂停
```

**恢复任务**:
```
位置: 已暂停任务
按钮: [▶ 播放图标]
效果: 从暂停点继续执行
```

**取消任务**:
```
位置: 等待/运行中任务
按钮: [⏹ 停止图标]
效果: 取消任务执行
注意: 运行中任务可能无法立即停止
```

**重试任务**:
```
位置: 失败任务列表
按钮: [🔄 重试图标]
效果: 重新执行失败的任务
```

---

## 💡 常见问题

### Q1: 如何设置每天定时执行？

**A**: 使用Cron定时触发

```yaml
步骤:
  1. 触发类型选择: Cron定时
  2. Cron表达式: 0 8 * * *
  3. 说明: 每天早上8点执行

其他示例:
  - 每天6点和18点: 0 6,18 * * *
  - 每天中午12点: 0 12 * * *
  - 每天晚上10点: 0 22 * * *
```

---

### Q2: 任务失败后如何自动重试？

**A**: 配置重试策略

```yaml
推荐配置:
  最大重试次数: 3
  重试策略: 指数退避
  
重试过程:
  第1次失败 → 等待2秒 → 第1次重试
  第2次失败 → 等待4秒 → 第2次重试
  第3次失败 → 等待8秒 → 第3次重试
  仍然失败 → 标记为最终失败

查看重试:
  - 任务队列 → 失败队列
  - 查看重试次数
  - 查看错误信息
```

---

### Q3: 如何查看任务执行历史？

**A**: 查看执行日志

```yaml
访问: 调度管理 → 执行日志

筛选条件:
  - 状态: 全部/成功/失败
  - 应用: 选择具体应用
  - 时间: 今天/最近7天/自定义

查看详情:
  1. 点击任务行的 [👁 眼睛图标]
  2. 查看详细执行信息:
     - 开始/结束时间
     - 执行时长
     - 输入/输出数据
     - 错误信息
     - 资源使用情况
```

---

### Q4: 任务一直失败怎么办？

**A**: 分析错误原因

```yaml
排查步骤:
  1. 查看错误信息:
     - 任务队列 → 失败队列
     - 查看错误详情
  
  2. 常见错误:
     - 网络超时: 检查网络连接
     - 数据库错误: 检查数据库状态
     - 参数错误: 检查应用配置
     - 权限不足: 检查权限设置
  
  3. 解决方法:
     - 修复错误原因
     - 更新应用配置
     - 手动重试任务
     - 如仍失败，联系技术支持

  4. 临时措施:
     - 禁用调度规则
     - 等待问题解决后再启用
```

---

### Q5: 如何避免任务重复执行？

**A**: 配置并发控制

```yaml
设置: 不允许并发执行

配置:
  ☐ 允许并发执行

效果:
  - 如果上次任务还在运行
  - 本次任务会等待上次完成
  - 或跳过本次执行(可配置)

适用场景:
  - 数据分析任务
  - 报告生成任务
  - 需要独占资源的任务
```

---

### Q6: 紧急任务会优先执行吗？

**A**: 会的

```yaml
优先级执行顺序:
  1. 紧急任务 (立即执行)
  2. 高优先级任务
  3. 中优先级任务
  4. 低优先级任务

抢占机制:
  - 紧急任务可以中断低优先级任务
  - 资源不足时优先分配给紧急任务
  - 紧急任务失败会立即重试

建议:
  ⚠️ 不要滥用紧急优先级
  ⚠️ 仅用于真正紧急的场景
```

---

### Q7: 如何临时禁用某个调度规则？

**A**: 使用启用/禁用开关

```yaml
操作:
  1. 进入: 调度管理 → 调度规则
  2. 找到要禁用的规则
  3. 点击: 状态列的开关
  4. 确认: 规则状态变为"已禁用"

效果:
  - 不会创建新任务
  - 已存在的等待任务不受影响
  - 可随时重新启用

适用场景:
  - 临时维护
  - 节假日暂停
  - 测试调试
```

---

### Q8: 任务太多，队列积压怎么办？

**A**: 优化调度策略

```yaml
短期措施:
  1. 暂停低优先级规则
  2. 增加系统资源
  3. 取消部分等待任务
  4. 批量处理相似任务

长期优化:
  1. 调整触发频率:
     - 减少不必要的定时任务
     - 延长检测间隔
  
  2. 优化任务配置:
     - 降低部分任务优先级
     - 启用并发执行
     - 增加并发数量
  
  3. 性能优化:
     - 优化应用代码
     - 减少执行时长
     - 降低资源消耗
  
  4. 容量规划:
     - 监控趋势变化
     - 提前扩容准备
     - 制定应急预案
```

---

## 🎯 最佳实践

### 1. 合理设置触发频率

**建议**:
```yaml
❌ 不好的设置:
  - 每分钟执行一次
  - 过于频繁的检测
  - 重复的触发条件

✅ 好的设置:
  - 根据实际需求设置频率
  - 监控类: 5-30分钟
  - 分析类: 1-6小时
  - 报告类: 每天/每周
```

---

### 2. 正确使用优先级

**建议**:
```yaml
❌ 不好的做法:
  - 所有任务都设为高优先级
  - 滥用紧急优先级
  - 忽略优先级设置

✅ 好的做法:
  - 根据业务重要性设置
  - 紧急优先级<总任务数的5%
  - 高优先级<总任务数的20%
  - 大部分使用中优先级
```

---

### 3. 配置合理的重试策略

**建议**:
```yaml
❌ 不好的配置:
  - 重试次数过多 (>5次)
  - 所有任务都立即重试
  - 不设置最大重试次数

✅ 好的配置:
  - 最大重试: 2-3次
  - 使用指数退避策略
  - 区分可重试和不可重试错误
  - 设置合理的超时时间
```

---

### 4. 定期检查执行日志

**建议**:
```yaml
检查频率:
  - 每天检查: 失败任务
  - 每周检查: 成功率趋势
  - 每月检查: 性能数据

关注指标:
  - 成功率: 应>95%
  - 平均执行时长: 监控变化
  - 失败原因: 分类统计
  - 资源使用: 避免超限
```

---

### 5. 做好容量规划

**建议**:
```yaml
监控指标:
  - 队列长度
  - 任务积压时间
  - 系统资源使用
  - 执行成功率

预警阈值:
  - 等待队列>50: 提示
  - 等待队列>100: 告警
  - 等待时间>30分钟: 告警
  - 成功率<90%: 告警

优化措施:
  - 及时调整触发频率
  - 优化任务执行效率
  - 增加系统资源
  - 分散任务执行时间
```

---

## 📞 需要帮助？

如有任何问题，请:
1. 查看本指南的常见问题部分
2. 查看完整功能文档
3. 查看执行日志诊断问题
4. 联系技术支持

---

**祝您使用愉快！🎉**

---

**更新时间**: 2024-10-23  
**版本**: v1.0  
**适用系统**: 智慧农业生产管理系统 - AI作物模型精准决策系统
