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 Google Gemini AI in Laravel

Integrating Google Gemini AI in Laravel

Google Gemini Gemini là một mô hình trí tuệ nhân tạo mới mạnh mẽ từ Google không chỉ có khả năng hiểu văn bản mà còn có thể hiểu cả hình ảnh, video và âm thanh. Gemini là một mô hình đa phương ti...

Send Slack Notifications In Laravel

Send Slack Notifications In Laravel

Slack là gì? Slack là một công cụ giao tiếp tại nơi làm việc, "một nơi duy nhất cho các tin nhắn, công cụ và file." Điều này có nghĩa là Slack là một hệ thống nhắn tin tức thì với nhiều plug-in cho...

Laravel Middlewares

Laravel Middlewares

Middleware cung cấp một cơ chế thuận tiện để lọc các yêu cầu HTTP gửi đến ứng dụng bạn. Nó là một lớp trung gian nằm giữa request và controller. Bạn có thể thêm các xử lý logic trước khi gửi đến contr...

ZSH-Artisan CLI and Docker: The Perfect Match for Laravel Development

ZSH-Artisan CLI and Docker: The Perfect Match for Laravel Development

Zsh Zsh viết tắt của “ Z Shell ” là một shell nâng cao cho hệ thống Unix và Linux. Nó được phát triển nhằm cung cấp các tính năng và khả năng cao hơn so với shell mặc định trên hầu hết các hệ thố...

Laravel Custom Eloquent Casts

Laravel Custom Eloquent Casts

Trước đây, chúng ta bị giới hạn cast mặc định do Laravel cung cấp. Mặc dù, có một số gói thư viện có thể  giúp chúng ta custom được nhưng chúng có một nhược điểm lớn. Bởi vì, chúng ghi đề phương thức...

Laravel Socialite Login With Gitlab

Laravel Socialite Login With Gitlab

GitLab GitLab là kho lưu trữ Git dựa trên web cung cấp các kho lưu trữ mở và riêng tư miễn phí, các khả năng theo dõi vấn đề và wiki. Đây là một nền tảng DevOps hoàn chỉnh cho phép các chuyên gia...

Eloquent Methods: whereDoesntHaveRelation and whereMorphDoesntHaveRelation

Eloquent Methods: whereDoesntHaveRelation and whereMorphDoesntHaveRelation

New Laravel 11.37: Eloquent Methods Laravel cung cấp cho chúng ta khả năng xây dựng các truy vấn dữ liệu mạnh mẽ với Eloquent ORM, giúp chúng ta có thể xử lý các truy vấn cơ sở dữ liệu phức tạp một...

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...

Pipeline Design Pattern in Laravel

Pipeline Design Pattern in Laravel

Pipeline Design Pattern là nơi mà các dữ liệu được chuyển qua một chuỗi các nhiệm vụ hoặc giai đoạn. Pipeline hoạt động giống như một chuỗi dây chuyền lắp ráp, nơi dữ liệu được xử lý và sau đó, sẽ...

ManhDanBlogs