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

Laravel Scout Full Text Search With Meilisearch

Laravel Scout Full Text Search With Meilisearch

Laravel Scout cung cấp một giải pháp đơn giản, dựa trên trình điều khiển để thêm tìm kiếm Full Text vào các mô hình Eloquent của bạn. Khi sử dụng Eloquent, Scout sẽ tự động giữ chỉ mục tìm kiếm của bạ...

Implementing Private User Folders with elFinder in Laravel

Implementing Private User Folders with elFinder in Laravel

elFinder elFinder là một trình quản lý tập tin mã nguồn mở dành cho web, được viết bằng JavaScript sử dụng jQuery UI. elFinder được phát triển dựa trên cảm hứng từ sự tiện lợi và đơn giản của chư...

Laravel Many to Many Polymorphic Relationship

Laravel Many to Many Polymorphic Relationship

Many to many Polymorphic Relationship cũng hơi phức tạp để hiểu. Ví dụ: nếu bạn có bài post, video và tag, bạn cần kết nối với nhau theo yêu cầu là mọi bài đăng đều có nhiều tag và video cũng như vậy....

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

How To Optimize Your Site With GZIP Compression

How To Optimize Your Site With GZIP Compression

GZIP là công nghệ nén thường được sử dụng để truyền dữ liệu một cách nhanh chóng qua Insternet. Hiện nay, GZIP là một tiêu chuẩn để nén các file trên trang web, đa số các website hiện nay hơn 99% sử d...

Laravel Artisan Console

Laravel Artisan Console

Ngoài các lệnh command mặc định của Laravel được cung cấp bởi Artisan, có rất nhiều tác vụ trong ứng dụng Laravel của bạn có thể được xử lý rất tốt bằng các lệnh command này. Nhưng đôi khi có nhiều tá...

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

Export CSV from SQL Server - Import into MySQL with Laravel

Export CSV from SQL Server - Import into MySQL with Laravel

Transfer Database Trong quá trình phát triển và bảo trì dự án, việc di chuyển cơ sở dữ liệu từ hệ thống này sang hệ thống khác là một nhiệm vụ khá phổ biến. Giả sử bạn cần di chuyển dữ liệu từ SQ...

ManhDanBlogs