Provides a simple framework to manage scheduling and execution of tasks Symfony application.
This bundle requires cron to be installed on the server to be able to execute scheduled tasks
Add the glooby/task-bundle
package to your require
section in the composer.json
file.
$ composer require glooby/task-bundle ~1.0
Add the GloobyTaskBundle to your application's kernel:
<?php
public function registerBundles()
{
$bundles = array(
// ...
new Glooby\TaskBundle\GloobyTaskBundle(),
// ...
);
...
}
Create this file /etc/cron.d/glooby_scheduler_run
* * * * * nginx cd /path/to/project && php app/console scheduler:run --env=prod &> /dev/null 2>&1
To setup a new runnable task you should follow these steps
example: src/Glooby/Api/TaskBundle/Task/PingTask.php
class PingTask implements TaskInterface
{
/**
* @inheritdoc
*/
public function run(array $params = [])
{
return 'pong';
}
}
Add service
services:
glooby_task.ping:
class: Glooby\TaskBundle\Task\PingTask
$ app/console task:run glooby_task.ping
"pong"
To setup a new schedule you should follow the steps below
Follow the steps in [Create a executable Task](#Create a executable Task)
By tagging your service with the glooby.scheduled_task tag it will be treated as a scheduled task
example:
src/Glooby/Api/TaskBundle/Resources/config/services.yml
services:
glooby_task.ping:
class: Glooby\TaskBundle\Task\PingTask
tags:
- { name: glooby.scheduled_task }
Annotate your class with this annotation: Glooby\TaskBundle\Annotation\Schedule
The first parameter to the annotation is defaulted to the interval parameter. In this parameter you configure the interval that the service should be executed.
The interval is a string of five or optional six subexpressions that describe details of the schedule. The syntax is based on the Linux cron daemon definition.
* * * * * *
- - - - - -
| | | | | |
| | | | | + 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)
This is the only required parameter
use Glooby\TaskBundle\Annotation\Schedule;
/**
* @Schedule("* * * * *")
*/
class PingTask implements TaskInterface
{
Here you have several shortcuts that you can use instead for most common use cases
value | interval |
---|---|
@yearly | 0 0 1 1 * |
@annually | 0 0 1 1 * |
@monthly | 0 0 1 * * |
@weekly | 0 0 * * 0 |
@daily | 0 0 * * * |
@hourly | 0 * * * * |
@semi_hourly | */30 * * * * |
@quarter_hourly | */15 * * * * |
@quarter_hourly | */15 * * * * |
* | * * * * * |
use Glooby\TaskBundle\Annotation\Schedule;
/**
* @Schedule("@hourly")
*/
class PingTask implements TaskInterface
{
The params that should be used when calling
use Glooby\TaskBundle\Annotation\Schedule;
/**
* @Schedule("@weekly", params={"wash": true, "flush": 500})
*/
class CityImporter implements TaskInterface
{
Phe active parameter tells if the schedule should be active or not, default=true
use Glooby\TaskBundle\Annotation\Schedule;
/**
* @Schedule("*/6", active=false)
*/
class PingTask implements TaskInterface
{
app/console schedule:sync
Install the dependencies:
$ script/bootstrap
Then, run the test suite:
$ script/test
See CONTRIBUTING file.
This bundle is released under the MIT license. See the complete license in the bundle: LICENSE.md