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 elFinder Into CKEditor 5 In Laravel

Integrating elFinder Into CKEditor 5 In Laravel

CKEditor 5 CKEditor 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 Validation

Laravel Validation

Lợi thế lớn nhất của Laravel so với các Framework khác là Laravel tích hợp rất nhiếu tính năng được tích hợp sẵn. Trong bài viết này, chúng ta sẽ tìm hiểu về Laravel Validation. Chức năng Là một...

Generate PDF with Header and Footer on every page in Laravel

Generate PDF with Header and Footer on every page in Laravel

Hôm nay, trong bài viết này mình sẽ chia sẻ với các bạn cách dompdf mà header và footer sẽ được hiển thị ở tất cả các trang. Đây cũng là một vấn đề khá phổ biến, khi chúng ta phát triển các tính năng...

Laravel Socialite Login With Facebook

Laravel Socialite Login With Facebook

Ngoài xác thực dựa trên biểu mẫu điển hình, Laravel cũng cung cấp một cách đơn giản và thuận tiện để sử dụng Laravel Socialite để xác thực với các nhà cung cấp OAuth. Socialite hiện hỗ trợ xác thực qu...

Laravel 9 REST API With Sanctum Authentication

Laravel 9 REST API With Sanctum Authentication

Laravel Sanctum Laravel Sanctum cung cấp một hệ thống authentication đơn giản cho các SPA, ứng dụng Mobile và API đơn giản sử dụng token. Sanctum cho phép ứng dụng của bạn phát hành các mã token...

Laravel One to Many Polymorphic Relationship

Laravel One to Many Polymorphic Relationship

One to Many Polymorphic Model Relationship được sử dụng khi một model thuộc về nhiều model khác trên một model kết hợp duy nhất. Ví dụ: Nếu chúng ta có bảng post và video, cả hai đều cần thêm hệ thống...

Laravel Mail Sending Redirector Listener

Laravel Mail Sending Redirector Listener

Trong quá trình phát triển web, việc gửi email là một chức năng quan trọng để thông báo, đặt lại mật khẩu, hoặc tương tác với người dùng. Tuy nhiên, khi chúng ta đang trong quá trình phát triển, vi...

Laravel UI Custom Email Verification Template

Laravel UI Custom Email Verification Template

Nếu bạn đang dùng thư viện laravel/ui để làm các chức năng liên quan đến authentication, và trong dự án của bạn, bạn cần thay đổi template email verification thay vì sử dụng template email verificatio...

Laravel Socialite Login With Linkedin

Laravel Socialite Login With Linkedin

LinkedIn LinkedIn là mạng xã hội tập trung vào mạng lưới nghề nghiệp và phát triển nghề nghiệp và chuyên nghiệp lớn nhất thế giới trên internet. Bạn có thể sử dụng LinkedIn để tìm công việc hoặc...

ManhDanBlogs