SuperAPI AI 工具集

symfony-scheduler

部署与运维

查看项目

更新于 10-15 21:08

技能介绍

用途:在 Symfony 应用中运行周期性工作(报表、清理、同步等),无需依赖系统 cron 条目。

主要能力:支持 RecurringMessage::every()、RecurringMessage::cron() 以及自定义 TriggerInterface;可用 #[AsSchedule] 将任务拆分为多个命名调度;通过 stateful($cache) 与 lock($lockFactory->createLock('scheduler')) 防止重任务重叠或丢失运行;可结合 PreRunEvent、PostRunEvent 记录日志。

使用方式:先安装 symfony/scheduler,编写消息及其 #[AsMessageHandler] 处理器;创建实现 ScheduleProviderInterface 的 #[AsSchedule('default')] 类并添加 RecurringMessage 条目;选择触发器(如 every('5 minutes') 或 cron('0 */6 * * *'),cron 需显式指定时区);在 Supervisor 下以 messenger:consume scheduler_default 运行,每个调度一个进程;可通过 getRecurringMessages() 和 getNextRunDate() 测试 provider。

适用场景:需要应用内调度、避免系统 cron、需要重叠控制与监控钩子的周期任务。

限制与注意:每个调度只能运行单个消费者(numprocs=1)并加锁,否则同一任务会触发两次;每个 cron 触发器必须显式声明时区;被调度的处理器必须幂等,因为运行可能重复;建议配合 Supervisor 的 --time-limit 与 autorestart 让长期 worker 自行回收。