mcpField
S
symfony-scheduler

symfony-scheduler

github.com/dev-toolings开发22782 次安装3 周前更新
代码仓库

关于 symfony-scheduler

面向 Symfony 开发者的定时任务技能,涵盖触发器选择、计划组织和工作进程运行,并说明如何控制重复或重叠执行。

主要功能

  1. 01周期与 cron 触发器
  2. 02命名计划提供器
  3. 03有状态计划与锁
  4. 04工作进程运行与监控

适用场景

  1. 01安排报告、清理和同步任务
  2. 02防止重型任务重叠执行
  3. 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] 将任务拆分为多个命名计划。
  • 防止繁重的计划任务发生重叠或漏跑。

默认工作流

  1. 安装 symfony/scheduler,然后编写消息及其 #[AsMessageHandler] 处理程序。
  2. 创建一个带有 #[AsSchedule('default')] 的类,实现 ScheduleProviderInterface,并添加 RecurringMessage 条目。
  3. 选择触发器:every('5 minutes') 或 cron('0 */6 * * *');使用 cron 时明确指定时区。
  4. 对繁重任务,在 Schedule 上添加 stateful($cache) 和 lock($lockFactory->createLock('scheduler'))。
  5. 在 Supervisor 下运行 messenger:consume scheduler_default,每个计划运行一个进程。
  6. 使用 PreRunEvent 和 PostRunEvent 记录日志,并通过 getRecurringMessages() 和 getNextRunDate() 测试提供程序。

防护措施

  • 每个计划只运行一个消费者(numprocs=1),并添加锁;否则同一任务可能触发两次。
  • 为每个 cron 触发器明确指定时区。
  • 计划处理程序必须具备幂等性,因为任务可能会重复运行。
  • 配合 Supervisor 的 autorestart 使用 --time-limit,使长期运行的工作进程定期重启。

渐进式说明

  • 使用此文件了解执行规范和风险控制。
  • 需要深入了解实现细节时,请查看参考资料。

输出约定

  • 计划提供程序及其触发器和时区。
  • 工作进程命令和 Supervisor 配置项。
  • 重叠处理策略(stateful、lock)和监控钩子。

参考资料

  • reference.md

评论

支持 Markdown