glooby/ task-bundle
为symfony简化任务调度
3.0.0
2019-10-18 08:16 UTC
Requires
- php: >=7.1
- doctrine/orm: ~2.6
- dragonmantank/cron-expression: ~2.0
- symfony/framework-bundle: ~4.3
Requires (Dev)
- php-coveralls/php-coveralls: ~2.1
- phpspec/prophecy: ~1.8
- phpunit/phpunit: ^7
- symfony/phpunit-bridge: ^4.3
README
为Symfony应用程序提供管理调度和执行任务的简单框架。
先决条件
此包需要在服务器上安装cron,以便能够执行计划任务
安装
将glooby/task-bundle
包添加到composer.json
文件中的require
部分。
$ composer require glooby/task-bundle ~3.0
将GloobyTaskBundle添加到应用程序的内核
<?php public function registerBundles() { $bundles = [ // ... new Glooby\TaskBundle\GloobyTaskBundle(), // ... ]; ... }
创建此文件 /etc/cron.d/glooby_scheduler_run
* * * * * nginx cd /path/to/project && php bin/console scheduler:run --env=prod &> /dev/null 2>&1
文档
创建可执行任务
要设置一个新的可运行任务,您应遵循以下步骤
实现TaskInterface
示例:src/Glooby/Api/TaskBundle/Task/PingTask.php
class PingTask implements TaskInterface { /** * @inheritdoc */ public function run(array $params = []) { return 'pong'; } }
为您的任务添加服务
services: glooby_task.ping: class: Glooby\TaskBundle\Task\PingTask
尝试通过CLI运行任务
$ bin/console task:run glooby_task.ping
"pong"
设置计划任务
要设置一个新的计划,您应遵循以下步骤
使您的服务可运行
按照[创建可执行任务](#Create%20a%20executable%20Task)中的步骤操作
标记服务
通过使用glooby.scheduled_task标记您的服务,它将被视为计划任务
示例
src/Glooby/Api/TaskBundle/Resources/config/services.yml
services: glooby_task.ping: class: Glooby\TaskBundle\Task\PingTask tags: - { name: glooby.scheduled_task }
注解您的类
使用此注解注解您的类:Glooby\TaskBundle\Annotation\Schedule
参数
interval
注解的第一个参数默认为interval参数。在此参数中,您配置服务应执行的间隔。
interval是一个包含五个或可选六个子表达式的字符串,描述了计划的详细信息。语法基于Linux cron守护进程定义。
* * * * * *
- - - - - -
| | | | | |
| | | | | + year [optional]
| | | | +----- day of week (0 - 7) (Sunday=0 or 7)
| | | +---------- month (1 - 12)
| | +--------------- day of month (1 - 31)
| +-------------------- hour (0 - 23)
+------------------------- min (0 - 59)
这是唯一必需的参数
use Glooby\TaskBundle\Annotation\Schedule; /** * @Schedule("* * * * *") */ class PingTask implements TaskInterface {
您可以使用以下快捷方式来代替大多数常见用例
use Glooby\TaskBundle\Annotation\Schedule; /** * @Schedule("@hourly") */ class PingTask implements TaskInterface {
params
在调用时应使用的params
use Glooby\TaskBundle\Annotation\Schedule; /** * @Schedule("@weekly", params={"wash": true, "flush": 500}) */ class CityImporter implements TaskInterface {
active
active参数告诉计划是否应该激活,默认为true
use Glooby\TaskBundle\Annotation\Schedule; /** * @Schedule("*/6", active=false) */ class PingTask implements TaskInterface {
同步计划到数据库,每次更新后必须运行此操作
bin/console scheduler:run
运行测试
安装依赖项
$ script/bootstrap
然后,运行测试套件
$ script/test
贡献
见CONTRIBUTING文件。
许可证
此包在MIT许可证下发布。请参阅包中的完整许可证:LICENSE.md