Files
omni-scheduler/README.md
gamewhale 45d3ca2f83 docs: 补充用户与开发者文档
- 新增 README.md,面向用户说明功能、运行要求、快速开始、触发器和常见问题。
- 新增 DEVELOPMENT.md,面向开发者说明项目结构、构建运行、发布流程、提交规范和检查清单。
- 将 artifacts/ 加入忽略规则,避免误提交本地发布产物。
- 修正托盘图标加载方式,改为读取 exe 内嵌图标,匹配不包含外置 app.ico 的发布包结构。
2026-05-21 11:44:38 +08:00

166 lines
5.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# OmniScheduler
OmniScheduler 是一款面向 Windows 的本地任务调度与消息推送工具。你可以创建定时、间隔、每周、每月或 Cron 规则,在规则触发时向本机 OmniNotify API 发送结构化通知消息。
它适合用来做本地提醒、周期性消息推送、脚本外部通知入口,以及需要可视化管理触发规则的轻量自动化场景。
## 功能概览
- 任务管理:创建、编辑、删除、克隆、启用/禁用任务。
- 多触发器:一个任务可以配置多个触发器。
- 触发类型支持单次执行、固定间隔、每日定时、每周定时、每月定时、Cron 表达式。
- 便捷时间设置:通过日期选择器和时分秒下拉框设置时间,无需手动输入时间格式。
- 单次快捷执行:支持设置“几分钟/几小时/几天后执行”,也提供常用快捷按钮。
- 触发预览:实时预览未来 5 次执行时间,便于检查规则是否符合预期。
- 消息模板:支持 `{CurrentTime}``{TaskName}``{TriggerType}` 动态变量。
- 执行日志:记录请求 JSON、响应内容、状态码、耗时和错误信息。
- 托盘运行:关闭窗口时默认隐藏到系统托盘,避免打断工作流。
- 低系统侵入:不提供开机自启功能,不写入 Windows 启动项。
## 系统要求
- Windows 10/11 x64
- [.NET 8 Desktop Runtime](https://dotnet.microsoft.com/download/dotnet/8.0)(发布包不内置运行时)
- 本机可访问的 OmniNotify API默认地址为
```text
http://127.0.0.1:19845/notify
```
## 下载与运行
1. 从仓库 Release 页面下载:
```text
OmniScheduler-v0.1.0-win-x64.zip
```
2. 解压到任意目录。
3. 双击运行 `OmniScheduler.exe`
4. 如系统提示缺少 .NET 运行时,请安装 .NET 8 Desktop Runtime 后再次运行。
发布包采用 framework-dependent、多文件形式不内置运行时也不启用单文件打包以减少体积并降低安全软件误报概率。
## 快速开始
1. 打开 OmniScheduler。
2. 点击“新建任务”。
3. 在“常规”页填写任务名称,并确认任务已启用。
4. 在“触发器”页添加触发器:
- 单次执行选择具体日期时间或使用“xx 时间后执行”的快捷设置。
- 固定间隔:设置每隔多少秒、分钟、小时或天执行。
- 每日/每周/每月:选择执行时间和对应日期条件。
- Cron 表达式:输入高级规则并查看未来执行时间预览。
5. 在“消息动作”页填写频道、标题和内容。
6. 点击“发送测试消息”确认 OmniNotify 能正常接收。
7. 保存任务。
## 消息格式
触发任务时OmniScheduler 会向配置的 OmniNotify API 地址发送 JSON
```json
{
"channel": "default",
"title": "提醒标题",
"body": "提醒内容"
}
```
频道名需要与 OmniNotify 中已创建的频道一致,否则 OmniNotify 可能拒绝请求并返回 `IllegalChannel`
## 动态变量
可以在频道、标题和内容中使用以下变量:
| 变量 | 含义 |
| --- | --- |
| `{CurrentTime}` | 当前触发时间,格式为 `yyyy-MM-dd HH:mm:ss` |
| `{TaskName}` | 当前任务名称 |
| `{TriggerType}` | 当前触发器摘要或触发来源 |
示例:
```text
标题:{TaskName} 已触发
内容:触发时间:{CurrentTime},触发方式:{TriggerType}
```
## 触发器说明
### 单次执行
在指定日期和时间执行一次。适合一次性提醒或临时任务。
单次执行支持快捷设置,例如:
- 5 分钟后
- 30 分钟后
- 1 小时后
- 明天此时
- 自定义 N 分钟/小时/天后执行
### 固定间隔
按固定间隔重复执行,例如每 10 分钟、每 2 小时或每 1 天执行一次。可以额外设置起始生效时间和结束失效时间。
### 每日、每周、每月
适合日历类周期任务:
- 每日:每天固定时间执行。
- 每周:选择星期几,并在固定时间执行。
- 每月:选择每月某日,或每月最后一个工作日执行。
### Cron 表达式
适合高级用户配置更复杂的时间规则。编辑时可以查看未来 5 次执行时间,用于校验表达式是否符合预期。
## 错过触发补偿策略
当系统休眠、关机或程序未运行导致错过计划时间时,可以选择:
- 忽略,等待下一次:不补发错过的任务。
- 立即补偿一次:恢复运行后补发一次,然后继续后续计划。
## 日志与数据存储
任务、设置和日志保存在当前用户目录:
```text
%LOCALAPPDATA%\OmniScheduler\state.json
```
你可以在全局设置中调整:
- OmniNotify API 地址
- 日志保留天数
- 最大日志条数
## 常见问题
### 为什么 release 包里没有 .NET 运行时?
为了减小体积,并降低杀毒软件对自包含单文件程序的误报概率。请在系统中安装 .NET 8 Desktop Runtime。
### 为什么没有开机自启?
为了降低对用户系统的影响OmniScheduler 不会写入 Windows 启动项。如果需要开机运行,建议由用户自行通过系统任务计划程序或快捷方式管理。
### 关闭窗口后程序为什么还在运行?
OmniScheduler 是调度工具,关闭主窗口时默认隐藏到系统托盘。需要完全退出时,请在托盘菜单中选择“退出”。
### 发送失败怎么办?
请优先检查:
- OmniNotify 是否正在运行。
- OmniNotify API 地址是否正确。
- 频道名是否存在并拼写一致。
- 执行日志中的响应内容和错误信息。
## 许可证
当前仓库暂未声明许可证。使用、分发或二次开发前,请先与维护者确认授权方式。