proklung / task-scheduler-bundle
这是一个用于自定义 Symfony 的任务调度器,它允许您通过 CRON 作业定期运行任务
1.0.0
2021-05-31 14:55 UTC
Requires
- php: >=7.3 | ^8.0
- dragonmantank/cron-expression: ^3.1
- psr/container: ^1.0
- symfony/config: ^4.4 || ^5.1
- symfony/console: ^4.4 || ^5.1
- symfony/dependency-injection: ^4.4 || ^5.1
- symfony/http-kernel: ^4.4 || ^5.0
Requires (Dev)
This package is auto-updated.
Last update: 2024-09-29 05:49:08 UTC
README
从TaskSchedulerBundle包进行分支。根据个人需求进行了改进。
安装
composer.json
"repositories": [ { "type": "git", "url": "https://github.com/proklung/task.scheduler.bundle" } ]
composer require proklung/task-scheduler-bundle
原始文档
使用方法
首先,将以下行添加到您的CRON配置中:* * * * * php /path/to/your/project/bin/console ts:run >> /dev/null 2>&1
这将调用调度器,它会审查所有计划的任务并相应地分配。您可以通过将任务的ID作为参数传递给命令来直接调用任务。请注意,这个ID是由调度器生成的,与该服务本身没有任何关系。
选项
>> /dev/null 2>&1
会丢弃任务的打印结果。移除它允许通过电子邮件发送。这可能因服务器配置而异,请参考您的服务器配置。
然后,您需要创建一个任务。任务可以是任何服务!您只需给它分配ts.task
标签并实现TaskInterface
,或者为了简化,可以扩展自AbstractScheduledTask
。
每 X 分钟
在 Foo\Bar\Task
中,计划每 5 分钟执行一次任务
use Prokl\TaskSchedulerBundle\Task\AbstractScheduledTask; use Prokl\TaskSchedulerBundle\Task\Schedule; class Task extends AbstractScheduledTask { protected function initialize(Schedule $schedule) { $schedule ->everyMinutes(5); // Perform the task every 5 minutes } public function run() { // Do stuff } }
您的任务现在已计划,并且每 5 分钟将执行一次。
每 X 小时或每日
如果您计划以每小时或每日为基础计划任务,则需要设置 minutes()
以及 hours()
、everyHours()
或 daily()
。**如果您省略了 minutes()
,则任务将在计划的小时(s)内每分钟运行一次**。
在 Foo\Bar\Task
中,计划每 5 小时执行一次任务
use Prokl\TaskSchedulerBundle\Task\AbstractScheduledTask; use Prokl\TaskSchedulerBundle\Task\Schedule; class Task extends AbstractScheduledTask { protected function initialize(Schedule $schedule) { $schedule ->minutes(0) ->everyHours(5); // Perform the task every 5 hours on minute 0 // Or if you want to perform your task at midnight every day // $schedule->minutes(0)->hours(0)->daily(); // Or schedule your task to run once at 9AM daily (this is effectively the same as daily() above) // $schedule->minutes(0)->hours(9); } public function run() { // Do stuff } }