关于 symfony-scheduler
面向 Symfony 开发者的定时任务技能,涵盖触发器选择、计划组织和工作进程运行,并说明如何控制重复或重叠执行。
主要功能
- 01周期与 cron 触发器
- 02命名计划提供器
- 03有状态计划与锁
- 04工作进程运行与监控
适用场景
- 01安排报告、清理和同步任务
- 02防止重型任务重叠执行
- 03测试计划消息和运行日期
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ dev-toolings/ superpowers-symfony --skill symfony-scheduler安装后在 Claude Code 中输入/symfony-scheduler确认已加载。
附带文件reference.md
详细介绍
Symfony Scheduler(Symfony)
适用场景
- 无需添加系统 cron 条目即可运行定期工作(报告、清理、同步)。
- 在
RecurringMessage::every()、RecurringMessage::cron()和自定义TriggerInterface之间进行选择。 - 使用
#[AsSchedule]将任务拆分为多个命名计划。 - 防止繁重的计划任务发生重叠或漏跑。
默认工作流
- 安装
symfony/scheduler,然后编写消息及其#[AsMessageHandler]处理程序。 - 创建一个带有
#[AsSchedule('default')]的类,实现ScheduleProviderInterface,并添加RecurringMessage条目。 - 选择触发器:
every('5 minutes')或cron('0 */6 * * *');使用 cron 时明确指定时区。 - 对繁重任务,在
Schedule上添加stateful($cache)和lock($lockFactory->createLock('scheduler'))。 - 在 Supervisor 下运行
messenger:consume scheduler_default,每个计划运行一个进程。 - 使用
PreRunEvent和PostRunEvent记录日志,并通过getRecurringMessages()和getNextRunDate()测试提供程序。
防护措施
- 每个计划只运行一个消费者(
numprocs=1),并添加锁;否则同一任务可能触发两次。 - 为每个 cron 触发器明确指定时区。
- 计划处理程序必须具备幂等性,因为任务可能会重复运行。
- 配合 Supervisor 的
autorestart使用--time-limit,使长期运行的工作进程定期重启。
渐进式说明
- 使用此文件了解执行规范和风险控制。
- 需要深入了解实现细节时,请查看参考资料。
输出约定
- 计划提供程序及其触发器和时区。
- 工作进程命令和 Supervisor 配置项。
- 重叠处理策略(stateful、lock)和监控钩子。
参考资料
reference.md
评论
支持 Markdown