close button

Chi tiết bài viết Detail

Tạo schedule trong Laravel – Tự động hóa tác vụ hiệu quả

Tạo schedule trong Laravel – Tự động hóa tác vụ hiệu quả

Trong bài viết này sẽ hướng dẫn bạn tạo schedule trong Laravel và giải thích schedule là gì?
Trong quá trình phát triển ứng dụng web, việc tự động hóa các tác vụ như gửi email hàng tuần, dọn dẹp database, hay backup dữ liệu là cực kỳ quan trọng. Laravel cung cấp một công cụ mạnh mẽ gọi là Task Scheduler. Thay vì phải tạo nhiều dòng Cron job thủ công trên server, bạn chỉ cần quản lý tất cả trong code của mình.

Bài viết có thể bạn quan tâm
Hướng dẫn cài Xdebug để debug lỗi

Laravel Scheduler là gì?

Trước đây, lập trình viên phải SSH vào server để cấu hình Cron job cho từng tác vụ. Với Laravel Task Scheduler, bạn chỉ cần duy nhất một Cron entry trên server. Mọi lịch trình (scheduling) sẽ được định nghĩa trực tiếp trong file PHP.

Các bước để tạo schedule trong Laravel

Bước 1: Tạo Artisan Command

Thông thường, chúng ta sẽ viết logic xử lý trong một Artisan Command để dễ quản lý và tái sử dụng.

Chạy lệnh sau để tạo command mới:

php artisan make:command SendWeeklyEmails

Sau đó, hãy mở file SendWeeklyEmails.php trong đường dẫn app/Console/Commands/SendWeeklyEmails.php và thêm logic vào hàm handle():

public function handle()
{
// Logic gửi email hoặc xử lý dữ liệu ở đây
$this->info('Emails đã được gửi thành công!');
}

Bước 2: Định nghĩa lịch trình trong Task Scheduler

Kể từ Laravel 11, bạn có thể định nghĩa schedule trong file routes/console.php. Đối với các phiên bản cũ hơn (Laravel 10 trở xuống), bạn thực hiện trong file app/Console/Kernel.php.

Ví dụ cấu hình trong routes/console.php (Laravel 11):

use Illuminate\Support\Facades\Schedule;

Schedule::command('emails:send-weekly')->weeklyOn(1, '08:00');

Các tùy chọn thời gian phổ biến:
->everyMinute(); | Chạy mỗi phút một lần
->hourly(); | Chạy mỗi giờ một lần
->daily(); | Chạy vào lúc 00:00 mỗi ngày
->twiceDaily(1, 13); | Chạy vào lúc 1:00 và 13:00 hàng ngày
->weekly(); | Chạy mỗi tuần một lần

Bước 3: Kích hoạt Scheduler trên Server (Cron Job)

Đây là bước quan trọng nhất để hệ thống hoạt động thực tế. Bạn cần thêm một dòng Cron entry duy nhất vào server (thường qua lệnh crontab -e):

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

Lưu ý: Thay /path-to-your-project bằng đường dẫn thực tế đến thư mục dự án của bạn.

Kiểm tra Schedule khi đang thao tác trong bằng Develop

Nếu bạn đã tạo schedule trong Laravel, đang ở môi trường Local và muốn test xem schedule có chạy đúng không mà không muốn cài đặt Cron job, hãy dùng lệnh bên dưới:

php artisan schedule:work

Lệnh này sẽ giữ process chạy và thực thi các task ngay khi đến giờ đã định hoặc đến khi bạn hủy bằng Ctrl + C.

Mẹo tối ưu và Hiệu năng khi tạo schedule trong Laravel

Tránh chồng chéo (Prevent Overlapping): Nếu một tác vụ chạy quá lâu, hãy dùng ->withoutOverlapping() để ngăn việc task mới khởi chạy khi task cũ chưa xong.

Log kết quả: Luôn sử dụng ->appendOutputTo($filePath) để ghi lại lịch sử chạy của task, giúp debug và kiểm tra code dễ dàng hơn.

Maintenance Mode: Sử dụng ->evenInMaintenanceMode() nếu bạn muốn task vẫn chạy ngay cả khi website đang bảo trì.

Thông tin tham khảo

Task Scheduling – Laravel 12.x

Bài viết liên quan

Hướng dẫn cài đặt Xdebug PHP để debug lỗi

Cài đặt Xdebug PHP là bước quan trọng giúp lập trình viên debug lỗi một cách chi tiết và chính xác hơn so với việc dùng dd() hay var_dump().Trong bài...

Xem tiếp...

Hướng dẫn setup remote sử dụng GPU thật

Trong bài viết này, tôi sẽ hướng dẫn setup remote sử dụng GPU thật 100%. Bạn sẽ không còn gặp tình trạng giật lag hay lỗi driver ảo. Việc render...

Xem tiếp...

Để lại suy nghĩ của bạn

Email của bạn sẽ không được hiển thị công khai.
Back To Top