写了三年定时任务还在手改 Cron 表达式?这个 GoFrame 后台框架帮你全闭环了
定时任务这东西,每个后端都写过。从最初 time.Ticker + goroutine,到自己搭个调度表,再到上 robfig/cron 库------功能是能跑了,但运维痛点一直在:改个执行周期要改代码重新部署;想知道任务有没有跑、跑没跑崩,得去翻日志文件;加个新任务要改配置、改代码、再发版,一套下来十分钟起步。
用了 XYGo Admin 之后,这块终于不用自己轮了。
注册一个任务,三行代码
在 internal/crons/ 下建一个文件,实现 GetName() 和 Execute() 两个方法就行:
go
// internal/crons/example.go
package crons
import (
"context"
"xygo/internal/library/cron"
)
func init() {
cron.Register(&ExampleTask{})
}
type ExampleTask struct{}
func (t *ExampleTask) GetName() string {
return "example_task"
}
func (t *ExampleTask) Execute(ctx context.Context, params []string) (string, error) {
// 你的业务逻辑
g.Log().Info(ctx, "定时任务执行中...")
return "执行完成", nil
}
Execute 的返回值会写进执行日志,不用再拼日志格式去 grep。比 robfig/cron 的 cron.AddFunc("*/5 * * * *", fn) 多了一层抽象,好处是:任务代码和执行周期完全解耦。
后台直接改周期,不用重新部署
代码注册完只是第一步------任务不会自动跑。需要在后台「系统管理 → 定时任务」里手动添加并启用。这一步才是真正把控制权交到运维手里:
- 新增任务 :从已注册的任务标识里选一个(下拉列表直接来自代码中的
GetName()),配置 Cron 表达式 - 启用/禁用:开关控制,不需要注释代码
- 手动触发:测试时可以直接点「在线执行」,立即跑一次看结果
- 执行日志:每次调度的结果和耗时都记录在案,哪次挂了、执行了多久一目了然
Cron 表达式是标准的 6 位格式(秒 分 时 日 月 周),每天凌晨 2 点清日志就是 0 0 2 * * *,工作日 9:30 跑报表就是 0 30 9 * * 1-5。不用像某些框架那样额外学一套 DSL。
扩展模块也能独立注册定时任务
如果你在用 XYGo Admin 的扩展体系(比如商城模块 shop),定时任务的隔离做得也很干净:
go
// server/addons/shop/crons/order_timeout.go
package crons
import (
"context"
cronlib "xygo/internal/library/cron"
)
func init() {
cronlib.Register(&OrderTimeoutTask{})
}
type OrderTimeoutTask struct{}
func (t *OrderTimeoutTask) GetName() string {
return "shop.order_timeout" // 扩展名.任务描述
}
func (t *OrderTimeoutTask) Execute(ctx context.Context, params []string) (string, error) {
// 取消超时未支付订单
return "取消了 5 个超时订单", nil
}
扩展的任务名建议用 扩展名.任务描述 格式,避免和主包任务撞名。module.go 里用空导入 _ "xygo/addons/shop/crons" 触发 init() 注册即可,和主包的 main.go 空导入 _ "xygo/internal/crons" 是同一套机制。
为什么比裸用 robfig/cron 舒服
裸用 robfig/cron 的时候常见流程是:写个 cron.go → 在 main.go 里 go runCron() → 改周期改代码 → 重新部署。一旦任务多了(十几个是常态),管理起来就是目录里一堆文件 + 注释开关 + 日志散落各处。
XYGo Admin 这套把三件事合到了一起:代码只管业务逻辑 、周期在 UI 里配 、日志统一入库可查 。搭配 GoFrame 的上下文传递,任务里拿 ctx 就能用 g.Log()、g.DB() 等全套设施,不用自己传参绕弯。
小结
对于 GoFrame 技术栈的团队,XYGo Admin 的定时任务体系不用额外集成,开箱就是一套从注册到调度到日志追踪的完整链路。改 Cron 不需要发版,手动触发方便调试,执行日志统一可查------这三个点,自己从头搭的话各要半天,加起来一天起步,但它直接给好了。
XYGo Admin 开发文档 里有定时任务和扩展开发的完整示例,拉下来就能跑。