Valentino Urbano


Implementing a cron job with Laravel 5 with Scheduling

November 20th 2018
Photo by Aron on Unsplash

Laravel includes ‘Scheduling’ to handle cron jobs. You can easily schedule them from inside Laravel using an expressive and easy to use syntax.


The “App\Console\Kernel” class handles all the scheduling in Laravel.

You should NOT put any logic in here though. This method should only be used to set the schedule. To actually define what to run you should create a new artisan command for each task you want to run. You can create a new command by running php artisan make:command. If your command is called "HourlyUpdate" run php artisan make:command HourlyUpdate.

It will create a new file inside app/Commands. Open it and edit its “signature”. It will be the name used from the kernel class and the command line to call your task.

Edit its description. It should be a human-readable explanation of the purpose of the command.

Edit its handle. The handle is the method that executes the task.

Now open “Kernel.php” in “app/Console” and add our newly created class to the “commands” array:

Edit “schedule” to schedule our tasks. For example everyMinute() will run the task every minute while everyHour() will run it every hour. You can also specify a specific day of the month with monthlyOn(1, '00:01') . To find a list of all available options check [the official documentation][4]

You can also tell Laravel to print the output of the task to a file appendOutputTo(PATH).

For our example, we’ll be running our task at the beginning of every month. We’ll also be saving the output to a file for debugging purposes and we want to make sure that a task doesn’t start if there is another task running.


You can test your cron job by manually calling it from the Terminal. You can list all your custom action and the default artisan actions using

It will return a list of all available actions.

“monthly:quota” is our custom action. We can call it using php artisan monthly:quota.

Adding to Cron

Finally, you need to actually go to the crontab in your Linux installation and tell the system to call Laravel every minute.

Laravel will than evaluate all the cronjobs and decide if it needs to schedule something for execution or not. If it doesn’t need to perform any action it will return straight away.

Open the crontab using the Terminal. It is usually located in /etc/crontab and add the following line, making sure to write in the path to your Laravel Project.

We’re also ignoring the output since Laravel already allows us to configure what to do with the output.

As always with schedules be mindful of different time zones.


Laravel makes it extremely easy to schedule tasks to run at specific intervals with an immediate syntax and many configuration options.

I’ve just launched Markdown Love in less than 24 hours, an API to turn any article on the web into markdown removing all the clutter, using Laravel.

You can find me on my Website and on Twitter.

More Related Stories