Trong các ứng dụng lớn, bạn cần lên lịch định kì cho các công việc bằng Cron jobs. Tại số một số thời điểm, việc quản lý các cron jobs trở nên cồng kềnh và khó khăn hơn. Laravel Scheduler là một công cụ hỗ trợ bạn dễ dàng quản lý và lên lịch cho các công việc bằng cron jobs. Có nhiều trương hợp khác nhau mà bạn cần lên lịch để thực hiện như sao lưu dữ liệu, email quảng cáo, v.v.

Để thiết lập Laravel Scheduler, bạn chỉ cần thiết lập một cron jobs trong máy chủ của bạn. Sử dụng điều đó, Laravel scheduler sẽ quản lý tất cả công việc mà bạn đã lên lịch.

Đầu tiên, chúng ta hãy tìm hiểu về Cron job.

Cron Job là gì?

Cron jobs là một lệnh Linux được sử dụng để lập lịch cho các công việc sẽ được thực thi tại một thời điểm nào đó trong tương lai, điều này thường được sử dụng cho một công việc được thực hiện theo chu kỳ.

Cấu trúc của cron jobs như sau:

*    *    *   *    *  Command_to_execute
|    |    |    |   |       
|    |    |    |    Day of the Week ( 0 - 6 ) ( Sunday = 0 )
|    |    |    |
|    |    |    Month ( 1 - 12 )
|    |    |
|    |    Day of Month ( 1 - 31 )
|    |
|    Hour ( 0 - 23 )
|
Min ( 0 - 59 )

Ví dụ:

Để chạy sample.sh hàng ngày lúc 9 giờ tối (21:00)

0 21 * * * sample.sh 1>/dev/null 2>&1

Cài đặt Laravel Scheduler

Được rồi, bây giờ từ những điều cơ bản về cron jobs, bạn hãy cài đặt Laravel Scheduler trong cron jobs nào.

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

Cron trên sẽ thực hiện lệnh "php artisan schedule:run" mỗi phút trong hệ thống và từ đó, Laravel Scheduler sẽ thực hiện được điều kì diệu của nó.

Ngoài ra, bạn có thể chạy Laravel Scheduler ở Local bằng lệnh command sau:

php artisan schedule:work

Cách thêm công việc vào Laravel Scheduler

Bây giờ, chúng ta sẽ tìm hiểu cách thêm công việc vào Laravel Scheduler và thực hiện chúng trong một thời gian nhất định.

Bạn có thể xác định công việc của mình trong hàm schedule của App\Console\Kernel, bạn có thể thêm công việc theo nhiều cách khác nhau:

+ Sử dụng artisan command (Link hướng dẫn)

+ Sử dụng Queued Jobs (Link hướng dẫn)

+ v.v

Schedule Artisan Command

<?php

namespace App\Console;

use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;

class Kernel extends ConsoleKernel
{
    /**
     * The Artisan commands provided by your application.
     *
     * @var array
     */
    protected $commands = [
        //
    ];

    /**
     * Define the application's command schedule.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
        $schedule->command('user:create')->daily();
    }

    /**
     * Register the commands for the application.
     *
     * @return void
     */
    protected function commands()
    {
        $this->load(__DIR__.'/Commands');

        require base_path('routes/console.php');
    }
}

Schedule Queued Jobs

<?php

namespace App\Console;

use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use App\Jobs\CreateUserJob ;

class Kernel extends ConsoleKernel
{
    /**
     * The Artisan commands provided by your application.
     *
     * @var array
     */
    protected $commands = [
        //
    ];

    /**
     * Define the application's command schedule.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
        $schedule->job(new CreateUserJob )->everyFiveMinutes();
    }

    /**
     * Register the commands for the application.
     *
     * @return void
     */
    protected function commands()
    {
        $this->load(__DIR__.'/Commands');

        require base_path('routes/console.php');
    }
}

Dưới đây là danh sách các tùy chọn, cho phép bạn thực hiện các công việc với tần số khác nhau:

Method Description
->cron(‘* * * * *’); Run the task on a custom Cron schedule
->everyMinute(); Run the task every minute
->everyTwoMinutes(); Run the task every two minutes
->everyThreeMinutes(); Run the task every three minutes
->everyFourMinutes(); Run the task every four minutes
->everyFiveMinutes(); Run the task every five minutes
->everyTenMinutes(); Run the task every ten minutes
->everyFifteenMinutes(); Run the task every fifteen minutes
->everyThirtyMinutes(); Run the task every thirty minutes
->hourly(); Run the task every hour
->hourlyAt(17); Run the task every hour at 17 minutes past the hour
->everyTwoHours(); Run the task every two hours
->everyThreeHours(); Run the task every three hours
->everyFourHours(); Run the task every four hours
->everySixHours(); Run the task every six hours
->daily(); Run the task every day at midnight
->dailyAt(’13:00′); Run the task every day at 13:00
->twiceDaily(1, 13); Run the task daily at 1:00 & 13:00
->weekly(); Run the task every sunday at 00:00
->weeklyOn(1, ‘8:00’); Run the task every week on Monday at 8:00
->monthly(); Run the task on the first day of every month at 00:00
->monthlyOn(4, ’15:00′); Run the task every month on the 4th at 15:00
->monthlyOnLastDay(’15:00′); Run the task on the last day of the month at 15:00
->quarterly(); Run the task on the first day of every quarter at 00:00
->yearly(); Run the task on the first day of every year at 00:00
->timezone(‘America/New_York’); Set the timezone

Đây chỉ là những điều cơ bản về quản lý công việc định kỳ bằng Laravel Scheduler. Laravel Scheduler là một công cụ rất tiên tiến, do đó bạn có thể sử dụng nó cho các hoạt động phức tạp hơn.

Tôi hy vọng bài viết này đã giúp bạn hiểu hơn cách quản lý công việc định kỳ bằng Laravel Scheduler. Hãy cho tôi biết bạn đang sử dụng Laravel Scheduler trong ứng dụng của mình như thế nào!

Tạm biệt!

CÓ THỂ BẠN QUAN TÂM

Integrating CKEditor 5 in Laravel 10 using Vite

Integrating CKEditor 5 in Laravel 10 using Vite

CKEditor 5CKEditor 5 là một trình soạn thảo văn bản phong phú JavaScript với nhiều tính năng và khả năng tùy chỉnh. CKEditor 5 có kiến trúc MVC hiện đại, mô hình dữ liệu tùy chỉnh và DOM ảo, mang...

Laravel Validate Video Duration

Laravel Validate Video Duration

Đôi khi trong dự án, chúng ta cần xác định thời lượng video được phép upload lên server. Nhưng rất tiếc, Laravel không cung cấp validate xác định thời lượng video để chúng ta thực hiện được. Vì vậy, t...

Laravel User Authentication

Laravel User Authentication

Trong hướng dẫn này, tôi sẽ hướng dẫn bạn xây dựng chức năng đăng nhập trong Laravel. Công bằng mà nói thì bạn có thể sử dụng Laravel UI hoặc JetStream để tự động tạo ra chức năng đăng nhập trong Lara...

Laravel Custom Rules

Laravel Custom Rules

Trong quá trình phát triển website Laravel, mình cảm thấy hệ thống Validation của Laravel rất tuyệt vời, nó cung cấp đã cung cấp cho chúng ta một bộ quy tắc kiểm tra dữ liệu, mà trong các trường hợp b...

Simplify Your Laravel Workflow with Laravel Pint

Simplify Your Laravel Workflow with Laravel Pint

Laravel Pint là gì? Laravel Pint là một công cụ sửa đổi mã nguồn của bạn để mã nguồn của bạn tuân thủ theo các tiêu chuẩn. Nói một cách khác, Laravel Pint sẽ quét toàn bộ mã nguồn của bạn, phát...

Laravel Jobs Batching

Laravel Jobs Batching

Phiên bản Laravel 8 đã được phát hành với một tính năng mà rất nhiều người trong chúng ta đã chờ đợi rất lâu đó là Jobs Batching, nó cho phép chúng ta thực hiện nhiều công việc trong cùng một lúc và t...

Integrating CKFinder with Amazon S3 in Laravel

Integrating CKFinder with Amazon S3 in Laravel

CKFinder 3 CKFinder 3 là trình quản lý tập tin được tích hợp với CKEditor 4 và CKEditor 5. Nó giúp bạn dễ dàng đưa các tập tin và hình ảnh vào nội dung của Editor một cách an toàn. Đây là một tín...

Laravel Queue Workers With Systemd

Laravel Queue Workers With Systemd

Systemd chủ yếu được sử dụng để quản lý các service trên môi trường Linux, nhưng nó cũng cho phép chúng ta quản lý các service với quyền không phải là root. Điều này, làm cho systemd trở thành một giả...

Laravel Change Expire Time Cookie Remember

Laravel Change Expire Time Cookie Remember

Vấn đề Đôi khi, trang web của bạn chỉ muốn người dùng sử chức năng remembering users  trong 7 ngày hoặc là 30 ngày chẳng hạn. Nhưng Authentication của Laravel không cung cấp cho chúng ta tùy chọn đ...

ManhDanBlogs