这个项目能做什么

go-schedule 是一个为 Linux、macOS 和 Windows 实现的跨平台任务调度器,采用 Go 语言编写。其设计核心在于提高循环调度的可读性:用户可以使用诸如“every 15 minutes”或“weekdays at 09:00”等自然语言表达式,或者使用文档记录的 cron 子集(包括传统的五字段形式和有界六字段秒级形式)。系统会对接受的调度方案进行回显,显示调度器的解析结果和下次运行时间,帮助用户在任务触发前纠正误读。 该项目提供三个主要接口:命令行界面 (gosched)、基于 Wails 的桌面 GUI 以及后台守护进程 (goschedd)。守护进程拥有调度引擎、SQLite 存储和执行器,而 CLI 和 GUI 则是通过本地 IPC 端点(Linux/macOS 上为 Unix 域套接字,Windows 上为命名管道)连接的轻量级客户端。这种设计意味着关闭 GUI 不会停止调度,且 CLI 和 GUI 操作的是同一状态。守护进程可以通过 systemd、launchd 或 Windows Service 注册为系统服务,从而实现开机自启且无需交互式登录即可运行。 调度行为包括 IANA 时区支持、对夏令时转换的显式处理、基于 UTC 的存储以及基于 RFC 5545 的循环语义。在停机时间后,每个错过运行的任务将获得一次补跑,然后恢复正常运行。针对每个任务的重叠策略可以选择排队一个待处理运行(默认)、跳过新运行或允许并发运行。对于日历边缘情况(如调度在 31 日、2 月 29 日或第五个星期五的任务),由声明的策略处理:跳过该周期、回退到最后一个有效日期或滚动到下一个周期。 其他功能包括具有级联启用/禁用功能的嵌套组、可在细节确定前保存的草稿任务、仅限手动的任务,以及任务链(任务以成功、失败或任何终止结果完成时可触发目标任务)。任务链被描述为持久的“至少一次”交付,且待处理工作在守护进程重启后依然存在。本地外部触发器和触发器集允许其他进程使用不透明密钥请求正常的调度运行;触发器集支持每个任务 1-99 个独立可用的密钥。文件系统监听器可以在选定文件被创建、写入或原子替换并稳定时请求任务运行;目录监听器使用基本名称 glob,并可选择包含真实子目录。 Cron 互操作性包括 gosched 的 cron 导入、解释和导出。导入功能可读取现有的 crontab,以自然语言显示每行内容及其下次运行时间并创建任务;--dry-run 可预览更改。不支持或有歧义的结构将被拒绝而非近似处理。@reboot 形式和易读的“at scheduler startup”形式可创建跨平台的启动任务,在每次守护进程启动时运行一次。 该项目采用 Apache-2.0 许可证。发布版本包括 Windows MSI 安装程序、macOS 桌面包、Linux 桌面包以及无头守护进程和 CLI 归档文件。文档涵盖安装、CLI 参考、GUI 字段、cron 互操作性、安全性及维护者测试脚本。开发过程由规范驱动(规范位于 specs/001-task-scheduler),并使用 Go 工具标准,包括 gofmt、go vet、golangci-lint、go test -race 以及核心包的覆盖率目标。