Hướng dẫn php artisan schedule:run

Mặc định Laravel cung cấp các method schedule cho khai báo Cronjob:

MethodMô tả
->cron['* * * * *']; Run the task on a custom Cron schedule
->everyMinute[]; Run the task every minute
->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 mins past the hour
->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 week
->weeklyOn[1, '8:00']; Run the task every week on Monday at 8:00
->monthly[]; Run the task every month
->monthlyOn[4, '15:00']; Run the task every month on the 4th at 15:00
->quarterly[]; Run the task every quarter
->yearly[]; Run the task every year
->timezone['America/New_York']; Set the timezone

Trong Laravel thời gian tối thiểu giữa 2 lần chạy job là 1 phút. Vì 1 lý do nào đó cần phải chạy 1 job định kỳ 20-30s chẳng hạn. Khi đó ta cần khai báo 1 job chạy định kỳ 1 phút và chia nhỏ phần thực thi. Sửa lại file Kernel.php

protected function schedule[Schedule $schedule]{ $schedule->call[function [] use [$schedule] { $seconds = 10; $dt = Carbon::now[]; $x= 60/$seconds; do{ echo $dt."\n"; Artisan::call['pokez']; Artisan::call['board']; time_sleep_until[$dt->addSeconds[$seconds]->timestamp]; } while[$x-- > 0]; }]->everyMinute[];
}

Ở đây mình chạy 2 job pokez và board, để kiểm tra user, định kỳ 10s 1 lần.

Kiểm tra cho đúng, chạy lệnh `php artisan schedule:run` để xem kết quả. Nếu như này thì đã cấu hình đúng:

[email protected] pokez.laravel.vip % php artisan schedule:run
Running scheduled command: Closure
2019-12-12 02:10:09
2019-12-12 02:10:19
2019-12-12 02:10:29
2019-12-12 02:10:39

Trong các công việc cần thực hiện trên một hệ thống website, đôi khi một số công việc chúng ta cần thực hiện theo một kế hoạch định trước, ví dụ như chúng ta cần xóa các dữ liệu tạm trong các bảng của cơ sở dữ liệu vào giữa đêm hoặc chúng ta muốn tổng hợp các báo cáo tốn rất nhiều tài nguyên vào cuối ngày để hôm sau có thể truy cập được ngay... Laravel Task Scheduling cho phép bạn thực hiện các công việc theo một kế hoạch đặt trước.

1. Thiết lập thời gian biểu

Laravel Task Scheduling cho phép bạn lập thời gian biểu để chạy thực hiện các loại ứng dụng sau:

1. Một lời gọi đến Closure

$schedule->call[function [] {
    DB::table['temp_data']->delete[];
}]->daily[];
``

**2. Một câu lệnh [Artisan][/blog/laravel-artisan-la-gi-tai-sao-noi-cong-cu-nay-cuc-huu-ich/]**

```{.language-php}
$schedule->command['emails:send --force']->daily[];

3. Một câu lệnh trong hệ điều hành

$schedule->exec['ipconfig -all']->daily[];

Các công việc cần thực hiện và thời gian biểu cần được định nghĩa trong phương thức schedule[] của lớp App\Console\Kernel [file app\Console\Kernel.php]. Trong ví dụ tiếp theo, chúng ta sẽ thực thi một câu lệnh artisan inspire cứ 5 phút một lần vào xuất nội dung vào một file inspire.txt nằm trong ổ C. Trước tiên chúng ta cần định nghĩa trong app\Console\Kernel.php.

Chủ Đề