Sử dụng Laravel Task Scheduler với window 10

Nếu như trong linux muốn tạo cron cho laravel ta phải thêm vào crontab như sau:

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

Còn window muốn tạo cron laravel thì phải làm sao?Đừng lo window đã có Windows Task Scheduler
Chú ý:Ở đây mình sử dụng window 10
Các bước tạo cron window như sau:
Bước 1 : Tạo database để test cron
Sử dụng Laravel Migration để tạo bảng random

D:\xampp\htdocs\blog>php artisan make:migration create_randoms_table --create=randoms
Created Migration: 2018_09_16_033208_create_randoms_table

Thêm code tạo bảng random vào file 2018_09_16_033208_create_randoms_table

<?php
 
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
 
class CreateRandomsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('randoms', function (Blueprint $table) {
            $table->increments('id');
            $table->string('random_string');
            $table->timestamps();
        });
    }
 
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('randoms');
    }
}

Chạy lệnh php artisan migrate để tạo ra bảng random trong database

D:\xampp\htdocs\blog>php artisan migrate
Migrating: 2018_09_16_033208_create_randoms_table
Migrated:  2018_09_16_033208_create_randoms_table

Tạo model randoms

D:\xampp\htdocs\blog>php artisan make:model Randoms
Model created successfully.

Bước2:Tạo cron laravel
Ở đây mình sẽ tạo cron random:

D:\xampp\htdocs\blog>php artisan make:command Random
Console command created successfully.

Sửa file random như sau:
D:\xampp\htdocs\blog\app\Console\Commands\Random.php

<?php
 
namespace App\Console\Commands;
 
use Illuminate\Console\Command;
use App\Randoms;
class Random extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'demo:random';
 
    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Random string';
 
    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }
 
    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        $randoms = new Randoms();
        $randoms->random_string=uniqid();
        $randoms->save();
        $this->info('demo:random Cummand Run successfully!');
    }
}

Tiếp theo ta sửa file Kernel.php(app/Console/Kernel.php) như sau:
D:\xampp\htdocs\blog\app\Console\Kernel.php

<?php
 
namespace App\Console;
 
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
//use App\Console\Commands\Test;
use App\Console\Commands\Random;
class Kernel extends ConsoleKernel
{
    /**
     * The Artisan commands provided by your application.
     *
     * @var array
     */
    protected $commands = [
        //Test::class,
        Random::class
 
    ];
 
    /**
     * Define the application's command schedule.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
        $schedule->command('demo:random')->everyMinute();
    }
 
    /**
     * Register the Closure based commands for the application.
     *
     * @return void
     */
    protected function commands()
    {
        require base_path('routes/console.php');
    }
}

Chạy lệnh sau để test xem cron chạy ok chưa :

D:\xampp\htdocs\blog>php artisan demo:random
demo:random Cummand Run successfully!

Bước 3 : Đặt lịch chạy cron laravel window 10
Trong window có công cụ Windows Task Scheduler chuyên để đặt lịch thực thi các ứng dụng trong hệ thống.
Để chạy ứng dụng này các bạn dùng phím tắt Windows + R rồi nhập vào Taskschd.msc
Để tạo một lịch ta làm như sau:
Bước 3.1 : Ta bấm vào Create Task

Ở tab Gerenal này ta tạo tên lịch bằng cách nhập tên vào ô name.
Chọn Run whether user is logged on or not
Chọn hidden và ở mục configure for bạn chọn hệ điều hành đang chạy.Ở đây mình chọn window 10.
Mục hidden này có tác dụng là hệ thống sẽ không hiện command line popup mỗi khi cron chạy

Bước 3.2:Tạo trigger
Để tạo trigger bạn bấm vào tab Triggers:
Ở đây ta chọn daily và recur every:365
Repeat task every chọn 1 minute.Chú ý nhớ bỏ chữ s trong minutes
Chọn for a duration of là indefinitely

Bước 3.3: Tạo action
Để tạo action bạn bấm vào tab Actions:
Ở mục program/script nhập vào đường dẫn tới file php.exe

d:\xampp\php\php.exe

Ở mục Add Arguments các bạn nhập vào đường dẫn như sau :

d:\xampp\htdocs\blog\artisan schedule:run

Chú ý :Sửa lại đường dẫn theo project của bạn

Bước 3.4 :Settings
Để cấu hình setting bạn bấm vào tab Settings:
Ở mục này các bạn chỉ cần check vào Run task as soon as possible after a scheduled start is missed

Vậy là mục cấu hình đã xong các bạn bấm Ok để xem kết quả nhé
Chú ý :Nếu sau khi bạn bấm ok hiện bảng thông báo sau thì bạn chỉ cần bấm ok là được

Còn nếu không được thì các bạn chỉnh lại ở bước 3.1 là Run only when the user is logged on