dev-master
9999999-devCron Scheduler for CakePHP 3
MIT
The Requires
The Development Requires
by Li
1.0.0
1.0.0.0Cron Scheduler for CakePHP 3
MIT
The Requires
The Development Requires
by Li
Cron Scheduler for CakePHP 3
Cron Scheduler Plugin for CakePHP 3, (*1)
CakeScheduler allows you to write cron jobs right from PHP files. It works for CakePHP shell as well as any other valid PHP code. Basically it is a replacement of the conventional crontab file., (*2)
The conventional way of writing a cron job is to place an entry in the crontab file each time you need to schedule a job. The problem with this approach is that you have to login(SSH) to the server each time., (*3)
By using CakeScheduler, we are able to place the cron jobs in the source control system and deploy them to production just like any other PHP code., (*4)
To install the CakeScheduler plugin, you can use composer. From your application's ROOT directory (where composer.json file is located) run the following:, (*5)
composer require watchowl/cake-scheduler
, (*6)
You will need to add the following line to your application's config/bootstrap.php
file:, (*7)
Plugin::load('WatchOwl/CakeScheduler');
, (*8)
We only need to install one ordinary cron job which runs every minute. This cron job will enable CakeScheduler to schedule all the subsequent jobs:, (*9)
* * * * * /path-to-project/bin/cake cake_scheduler run schedule:run
, (*10)
A schedule is basically a PHP file ending with Tasks.php and it must return the CakeSchedule object. All schedules should be place inside a folder called schedule. This folder must reside at the root directory where composer.json file is located., (*11)
For example:, (*12)
// schedule/BackTasks.php $schedule = new \WatchOwl\CakeScheduler\Schedule\CakeSchedule(); $schedule ->run('/usr/bin/php backup.php') ->daily() ->description('Test'); return $schedule;
To schedule a CakePHP shell, call CakeSchedule::shell:, (*13)
$schedule->shell('MyCake awesome')
, (*14)
To schedule any other commands, call CakeSchedule::run:, (*15)
$cakeSchedule->run('/usr/bin/php backup.php')
, (*16)
There is plenty of ways to define the frequency of the execution:, (*17)
Method | Description |
---|---|
->cron() | the classic way of defining a schedule |
->hourly() | beginning of each hour |
->daily() | daily at midnight |
->weekly | sunday of each week |
->monthly() | first day of each month |
->quarterly() | first day of each quarter |
->yearly() | first day of each year |
->everyFiveMinutes() | every five minutes |
->everyMinute() | every minute |
->everyTwelveHours() | every twelve hours |
->everyMonth() | every month |
->everySixMonths() | every six months |
->everyFifteenDays() | every fifteen days |
->on('13:30 2016-03-01') | at a specific date and time |
->at('13:30') | at a specific time |
Under the hood, CakeSchedule is using the great lavary/crunz library. It has a large number of options for us to configure the frequency of the execution. Check out its official documentation if you are looking for more available frequency., (*18)
Hooks make it easy to integrate with other services such as www.watchowl.io., (*19)
To do something before a job is executed, we can use the before() hook:, (*20)
For example:, (*21)
$schedule = new \WatchOwl\CakeScheduler\Schedule\CakeSchedule(); $schedule ->run('/usr/bin/php backup.php') ->before(function() { // Do something before the job runs }) ->daily() ->description('Test'); return $schedule;
To do something after a job is executed, we can use the after() hook:, (*22)
For example:, (*23)
$schedule = new \WatchOwl\CakeScheduler\Schedule\CakeSchedule(); $schedule ->run('/usr/bin/php backup.php') ->after(function() { // Do something after the job is finished }) ->daily() ->description('Test'); return $schedule;
Cron Scheduler for CakePHP 3
MIT
Cron Scheduler for CakePHP 3
MIT