Laravel Cronjob và Lập kế hoạch nhiệm vụ

Tram Ho

1. Mở đầu

Trong hướng dẫn này, tôi sẽ hướng dẫn các bạn cách thiết lập Task Scheduling trong Laravel 6. Cron này sẽ gọi lệnh Schduler mỗi phút. Khi câu lệnh schedule:run được thực thi, Laravel sẽ thực hiện các tác vụ theo lịch trình của bạn.

2. Task Schedule với Cronjob

Để thực hiện được thì chúng ta phải thêm một số trường mới vào bảng users trong cơ sở dữ liệu.

2.1. Thiết lập bảng

Hãy tới file migration của bảng users và thêm đoạn code dưới đây vào function up()

Sau khi thêm đoạn code, chạy câu lệnh php artisan migrate để thêm những trường này vào trong bảng cơ sở dữ liệu. Ở đây tôi có thêm trường last_login để kiểm tra lần cuối người dùng đã đăng nhập.

2.2. Tạo Command tùy chỉnh

Để tạo Command tùy chỉnh, chạy câu lện dưới đây:

Sau khi thực hiện lệnh này, bạn sẽ thấy tập tin này trong thư mục appConsoleCommandsinactiveUsers.php.

2.3. appConsoleCommandsinactiveUsers.php

Các bạn mở thư mục appConsoleCommandsinactiveUsers.php và sẽ thấy đoạn code này ở trong.

Trong đó, $signature là tên hoặc mã định danh của lệnh và mô tả giúp cung cấp thêm thông tin về lệnh, $description mô tả chức năng của task và việc xử lý logic của task sẽ được viết trong hàm handle().

2.4. Tạo thông báo

Chạy câu lệnh sau để tạo một thông báo mới

Sau khi chạy câu lênh, bạn sẽ thấy file này trong thư mục appNotificationsNotifyInactiveUser.php và hãy dán đoạn code dưới đây vào file đó.

2.5. Thiết lập appConsoleCommandsinactiveUsers.php

Mở file appConsoleCommandsinactiveUsers.php và dán đoạn code sau đây:

Bây giờ bạn chạy câu lệnh php artisan list thì bạn sẽ nhìn thấy câu lệnh tùy chỉnh trong danh sách câu lệnh Artisan của Laravel

Ở đây tôi sử dụng $limit = Carbon::now()->subDay(7) để lấy ra những người dùng có thời gian đăng nhập từ 7 ngày trước và gửi thông báo cho họ.

2.6. Thiết lập Controller

Để lưu dữ liệu ở trường last_login, hãy chuyển đến controller và thêm đoạn code sau vào phương thức sau khi đăng nhập thành công của bạn.

Giờ đây, chúng ta đã lưu được thời gian đăng nhập của người dùng.

2.7. Đăng ký Command và Scheduler

Để đăng ký Command, đi đến thư mục appConsoleKernel.php. Ở file Kernel, đăng ký Command bên trong $commands.

Và dán đoạn code bên trên vào trong. Ở phương thức schedule(), ta có thể xác định được khoảng thời gian mà mình muốn xử lý Schedule. Các bạn có thể tham khảo một số mốc thời gian ở đây: https://laravel.com/docs/6.x/scheduling#schedule-frequency-options
Cuối cùng chúng ta sẽ được file Kernel như sau:

Bây giờ các bạn chạy câu lệnh:

Sau đó logic của bạn sẽ làm việc. Điều đó có nghĩa là thông báo của bạn sẽ được gửi đến những người dùng đã đăng nhập 7 ngày trước.

2.8. Dùng lệnh Schedule để kiểm tra

Giờ đây chúng ta đã sẵn sàng để chạy Cron, vì vậy bạn có thể kiểm tra thủ công bằng cách chạy câu lệnh:

Cuối cùng, bạn có thể quản lý lệnh này trong Schedule Task, bạn phải khai báo một mục vào file crontab của máy chủ:

Hy vọng bài viết này có thể giúp được các bạn.

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo