Task Scheduling using Laravel 5


In this blog post I will show you an easy example about how to create a simple Laravel 5 Command-Line program to be executed regularly by particular time interval or specified time.

Laravel’s command scheduler allows you to fluently and expressively define your command schedule within Laravel itself. When using the scheduler, only a single Cron entry is needed on your server. Your task schedule is defined in the app/Console/Kernel.php file’s schedule method. To help you get started, a simple example is defined within the method.

Create Simple Laravel Command-Line

we will use two log files to store output text (I show you my real path to avoid confuse ) :

Cron log file :  /home/yusuf/general.log

Scheduler output file: /home/yusuf/htdocs/blog/storage/logs/scheduler.log

 

  • Create app/Console/Commands/SayHello.php.

    1. CreateSayHelloDotPHP
    Create a new PHP file
  • Let’s write the simple short php code

    vim app/Console/Commands/SayHello.php

    namespace App\Console\Commands;
    
      use Illuminate\Console\Command;
    
      class SayHello extends Command
      {
          protected $signature = 'sayhello';
          protected $description = 'Say Hello User';
    
          public function __construct()
          {
              parent::__construct();
          }
    
          public function handle()
          {
              $this->info('Hello user...! ('. date("Y-m-d H:i:s") .') ');
          }
      }
    

    vim app/Console/Commands/Kernel.php

     /**
     * The Artisan commands provided by your application.
     *
     * @var array
     */
     protected $commands = [
         Commands\SayHello::class
     ];
    
  • Check out the new registered Laravel 5 Command-Line in the command list

    3. checkNewCommand
    New registered Laravel Command-line
  • Execute SayHello as Laravel 5 Command-Line program

    4. ExecuteIt
    Execute command line on terminal

Create Scheduler to Execute Command-Line

The next important step is about how to execute our Laravel Command-Line regularly. By using the Laravel scheduler you only need to add the following short line Cron entry to your server an then Laravel Forge will manage the Cron entries for you:

  • Create a log file for our Laravel scheduler storage/logs/scheduler.log:5. Laravel-Logs
  • Edit app/Console/Commands/Kernel.php   

    vim app/Console/Commands/Kernel.php

  • /**
     * Define the application's command schedule.
     *
     * @param \Illuminate\Console\Scheduling\Schedule $schedule
     * @return void
     */
     protected function schedule(Schedule $schedule)
     {
         $filePath = '/home/yusuf/htdocs/blog/storage/logs/scheduler.log';
         $schedule->command('sayhello')->everyMinute()->sendOutputTo($filePath);
     }
    
  • Test execute the scheduler

    ./artisan schedule:run6.scheduler-registered

  • Register schedule command as cron entry

    $ crontab -e7.registerCronEntry.png

     

    CronTabBlog1

  • Save the file and quit text editor
  • Tail the log file to see the result

    tail -f ~/general.log

    tail -f /home/yusuf/htdocs/blog/storage/logs/scheduler.log

    CrontabOutput2

  • That’s all
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s