- 新增 README.md,面向用户说明功能、运行要求、快速开始、触发器和常见问题。 - 新增 DEVELOPMENT.md,面向开发者说明项目结构、构建运行、发布流程、提交规范和检查清单。 - 将 artifacts/ 加入忽略规则,避免误提交本地发布产物。 - 修正托盘图标加载方式,改为读取 exe 内嵌图标,匹配不包含外置 app.ico 的发布包结构。
166 lines
5.6 KiB
Markdown
166 lines
5.6 KiB
Markdown
# 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 地址是否正确。
|
||
- 频道名是否存在并拼写一致。
|
||
- 执行日志中的响应内容和错误信息。
|
||
|
||
## 许可证
|
||
|
||
当前仓库暂未声明许可证。使用、分发或二次开发前,请先与维护者确认授权方式。
|