Dispatcher is a Laravel artisan command scheduling tool used to schedule artisan commands within your project so you don't need to touch your crontab when deploying.
For Futher Information go to this link
Dispatcher.
- Do you hate to touch crontab to add scheduller in laravel?
- Do you hate with all crontab configuration when add scheduller in different servers?
Congratulations, Laravel has package to handle this problem using
Dispatcher. Everthing become simple and easy with this package. Doubt? Here we go!
Tool Kit
- PHP 5.3+ or HHVM
- Laravel 4
Configurations
In your application add this to your "require" :{} composer.json
"indatus/dispatcher": "1.4.*@dev"
remember to do
composer update.
In your
app/config/app.php providers array add this line:
'Indatus\Dispatcher\ServiceProvider',
Usage
scheduled
scheduled:make Create a new scheduled artisan command
scheduled:run Run scheduled commands
scheduled:summary View a summary of all scheduled artisan commands
Build scheduled command
php artisan scheduled:make yourCommands
Register scheduled command
In Your
app/start/artisan.php add this line depend on Your Command :
Artisan::add(new yourCommands);
Scripting
Go to your command app/command/yourCommands and change
// my artisan command will be php artisan cron:mycommands
protected $name = 'cron:yourCommands';
// Configure this functions to change schedule time
public function schedule(Schedulable $scheduler)
{
// Change this function to change time
return $scheduler->daily();
}
This is Scheduler Changes time function example list:
//every day at 4:17am
return $scheduler->daily()->hours(4)->minutes(17);
//every Monday/Friday at 8:30am
return $scheduler->daysOfTheWeek([
Scheduler::MONDAY,
Scheduler::FRIDAY
])->hours(8)->minutes(30);
// Using Raw Commands
//every other day at 1:59am, 13:59pm and 23:59pm
return $scheduler->setSchedule(59, [1,13,23], '*/2', '*', '*');
// Every minutes
return $scheduler->everyMinutes();
// Every 20 minutes
return $scheduler->everyMinutes(10);
// Every hours
return $scheduler->everyHours();
Cron Setup
In console add
crontab -e
* * * * * php {{ path to your app}}/artisan scheduled:run 1>> /dev/null 2>&1
Debugging
If your cron not running check this
// Via console, check your mcrypt
php -i | mcrypt.
// Via console
php artisan scheduled:run --debug
backup:avatars: No schedules were due
command:name: No schedules were due
myTestCommand:name: No schedules were due
cache:clean: /usr/bin/env php /Users/myUser/myApp/artisan cache:clean > /dev/null &
mail:subscribers: /usr/bin/env php /Users/myUser/myApp/artisan mail:subscribers > /dev/null &
// Via Console
php artisan scheduled:summary
//It works if output something like this:
+----------------+------------------+-----------+--------+------+--------------+-------+-------------+--------+
| Environment(s) | Name | Args/Opts | Minute | Hour | Day of Month | Month | Day of Week | Run as |
+----------------+------------------+-----------+--------+------+--------------+-------+-------------+--------+
| * | schedule:test | | */5 | * | * | * | * | |
+----------------+------------------+-----------+--------+------+--------------+-------+-------------+--------+