Skip to main content

Laravel 5 task scheduling with cron job example


If you want to execute scheduling jobs in specific time and specific interval then you can apply cron job which is a Unix command.

We can manage a task in the server that executes scripts which helps in sending daily/weekly reports from our website.
The main use of cron job is in cleaningup the databases, sending the emails, executing the time consuming tasks etc. We can simply delete files from the database with the help of Cron Job.
Cron job will only work on unix based machines. It consists of a configuration file called Crontable which is also known as Crontab.
This Cron tab is used to manage the scheduling and consists of different cron jobs and each of the cron job is associated with a specific task.

Generate A New Command Class :

First, we will generate our own custom commands by running following commands which will generate a class in the app/Console/Commands/ directory.


php artisan make:console CustomCommand

After running this command you will get a message 'Console command created successfully. ' on your terminal and then it generate a class file at app/Console/Commands/CustomCommand.php with default signature but you can assign the terminal command name by using --command option.
 
php artisan make:console CustomCommand --command=custom:command

Whenever command will be executed in your terminal then handle method of command class is called so i will write a code to delete all inactive users in handle method.
  1. namespace App\Console\Commands;
  2. use Illuminate\Console\Command;
  3. use DB;
  4. class CustomCommand extends Command
  5. {
  6. /**
  7. * The name and signature of the console command.
  8. *
  9. * @var string
  10. */
  11. protected $signature = 'custom:command';
  12. /**
  13. * The console command description.
  14. *
  15. * @var string
  16. */
  17. protected $description = 'Delete all inactive users';
  18. /**
  19. * Create a new command instance.
  20. *
  21. * @return void
  22. */
  23. public function __construct()
  24. {
  25. parent::__construct();
  26. }
  27. /**
  28. * Execute the console command.
  29. *
  30. * @return mixed
  31. */
  32. public function handle()
  33. {
  34. DB::table('users')->where('active', 0)->delete();
  35. $this->info('All inactive users are deleted successfully!');
  36. }
  37. }
Now we have to register our new command with Artisan so that it will be available in terminal. For this we just need to add this command class name to commands array in Kernerl class that is available in app/Console/Kernel.php.
 app/Console/Kernel.php
  1. namespace App\Console;
  2. use Illuminate\Console\Scheduling\Schedule;
  3. use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
  4. class Kernel extends ConsoleKernel
  5. {
  6. /**
  7. * The Artisan commands provided by your application.
  8. *
  9. * @var array
  10. */
  11. protected $commands = [
  12. Commands\CustomCommand::class,
  13. ];
  14. /**
  15. * Define the application's command schedule.
  16. *
  17. * @param \Illuminate\Console\Scheduling\Schedule $schedule
  18. * @return void
  19. */
  20. protected function schedule(Schedule $schedule)
  21. {
  22. $schedule->command('custom:command')->daily();
  23. }
  24. }
If you want to see your command description in terminal then run following command :
 
$ php artisan list
  1. custom
  2. custom:command Delete all inactive users
Now you can run your command to delete all inactive users.

$ php artisan custom:command


All inactive users are deleted successfully!

As you notice i schedule the command on daily basis but there are number of schedule frequencies which you can assign to the tasks.
Schedule tasks hourly basis
  1. $schedule->command('custom:command')
  2. ->hourly();
Schedule tasks on given time
  1. $schedule->command('custom:command')
  2. ->dailyAt('07:00');
Schedule tasks weekly basis
  1. $schedule->command('custom:command')
  2. ->weekly();
Schedule tasks monthly basis
  1. $schedule->command('custom:command')
  2. ->monthly();
If you wan to start the scheduler itself then you will have to add one cron job on server using the crontab -e command.

* * * * * php /path/to/artisan schedule:run >> /dev/null 2>&1

Using this, Laravel command scheduler will be called by cron every minute.

 

 

 

Comments

Popular posts from this blog

Async Queues In Laravel

Push a function/closure to the background. For Laravel 5.4, check the 0.6 branch For Laravel 5.3, check the 0.5 branch Just like the 'sync' driver, this is not a real queue driver. It is always fired immediatly. The only difference is that the closure is sent to the background without waiting for the response. This package is more usable as an alternative for running incidental tasks in the background, without setting up a 'real' queue driver. Note: This is using the DatabaseQueue, so make sure you set that up first, including migrations. Install Require the latest version of this package with Composer composer require barryvdh/laravel-async-queue Add the Service Provider to the providers array in config/app.php Barryvdh\Queue\AsyncServiceProvider::class, You need to create the migration table for queues and run it. $ php artisan queue:table $ php artisan migrate You should now be able to use the async driver in config/queue.php. Use the same config a...

Laravel working with Queues

What are queues in web development? Queues allow you to defer/postpone the processing of a time consuming task, such as sending an e-mail, until a later time, thus drastically speeding up the web requests to your application, which returns a response and serves the client significantly faster than it would be if the task ran synchronously. The Laravel Queue component provides a unified API across a variety of different queue services. There are different queue services. Some of them are hosted elsewhere, but some of them can be self-hosted, such as Beanstalkd, which I'll cover here. How do they work behind the scenes? Once you push a job onto the queue (from somewhere within your code, e.g. send an email after user has registered), all that the client has to wait for is for job to be pushed onto the queue service that is listening for jobs, and doesn't have to wait for the queue service to finish the job itself. The most trivial example would be a McDonalds employee ...

The Coolest New Tech In 2018

The world of tech is always evolving, and each new year comes with all sorts of innovations and breakthroughs from some of the coolest and most prestigious companies in the world. This year is no different, and more information is starting to come out about some of the coolest gadgets releasing in 2018. All of this cool new technology is set to be released to consumers sometime this year, and the general excitement is already making waves online. Out of all of these cool new gadgets, which of these releases is building the most hype? The biggest names in tech are looking to dazzle consumers with the latest revolutionary technologies, but there are also some lesser known companies who are showcasing their newest products in order to make a name for themselves. It's up to the people to decide what new technologies are going to take 2018 by storm and which ones will ultimately be forgotten. This Reverse Microwave Can Quick-Freeze Food And Drinks ...