Trước đây, bạn có thể đã viết một mục cấu hình cron cho từng tác vụ bạn cần lên lịch trên máy chủ của mình. Tuy nhiên, điều này có thể nhanh chóng trở thành một vấn đề khó khăn vì lịch trình tác vụ của bạn không còn nằm trong quyền kiểm soát nguồn và bạn phải SSH vào máy chủ của mình để xem các mục cron hiện tại của bạn hoặc thêm các mục bổ sung
Bộ lập lịch lệnh của Laravel cung cấp một cách tiếp cận mới để quản lý các tác vụ đã lên lịch trên máy chủ của bạn. Bộ lập lịch cho phép bạn xác định lịch trình lệnh của mình một cách trôi chảy và rõ ràng trong chính ứng dụng Laravel của bạn. Khi sử dụng bộ lập lịch, chỉ cần một mục cron duy nhất trên máy chủ của bạn. Lịch trình nhiệm vụ của bạn được xác định trong phương thức
$schedule->job[new Heartbeat]->everyFiveMinutes[];
7 của tệp $schedule->job[new Heartbeat]->everyFiveMinutes[];
6. Để giúp bạn bắt đầu, một ví dụ đơn giản được định nghĩa trong phương thứcXác định lịch biểu
Bạn có thể xác định tất cả các tác vụ theo lịch trình của mình trong phương thức
$schedule->job[new Heartbeat]->everyFiveMinutes[];
7 của lớp $schedule->job[new Heartbeat]->everyFiveMinutes[];
9 trong ứng dụng của bạn. Để bắt đầu, hãy xem một ví dụ. Trong ví dụ này, chúng tôi sẽ lên lịch đóng cửa để được gọi mỗi ngày vào lúc nửa đêm. Trong thời gian đóng, chúng tôi sẽ thực hiện truy vấn cơ sở dữ liệu để xóa bảnguse Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use Illuminate\Support\Facades\DB;
class Kernel extends ConsoleKernel
* Define the application's command schedule.
* @param \Illuminate\Console\Scheduling\Schedule $schedule
protected function schedule[Schedule $schedule]
$schedule->call[function [] {
DB::table['recent_users']->delete[];
Ngoài việc lên lịch sử dụng các lần đóng, bạn cũng có thể lên lịch. Các đối tượng có thể triệu hồi là các lớp PHP đơn giản có chứa một phương thức
// Dispatch the job to the "heartbeats" queue on the "sqs" connection...
$schedule->job[new Heartbeat, 'heartbeats', 'sqs']->everyFiveMinutes[];
0$schedule->call[new DeleteRecentUsers]->daily[];
Nếu bạn muốn xem tổng quan về các tác vụ đã lên lịch của mình và lần tiếp theo chúng được lên lịch để chạy, bạn có thể sử dụng lệnh Artisan
// Dispatch the job to the "heartbeats" queue on the "sqs" connection...
$schedule->job[new Heartbeat, 'heartbeats', 'sqs']->everyFiveMinutes[];
1Lập kế hoạch lệnh Artisan
Ngoài việc lên lịch đóng cửa, bạn cũng có thể lên lịch cho các lệnh Artisan và lệnh hệ thống. Ví dụ: bạn có thể sử dụng phương thức
// Dispatch the job to the "heartbeats" queue on the "sqs" connection...
$schedule->job[new Heartbeat, 'heartbeats', 'sqs']->everyFiveMinutes[];
2 để lên lịch cho lệnh Artisan bằng cách sử dụng tên hoặc lớp của lệnhKhi lên lịch cho các lệnh Artisan sử dụng tên lớp của lệnh, bạn có thể chuyển một mảng các đối số dòng lệnh bổ sung sẽ được cung cấp cho lệnh khi nó được gọi
use App\Console\Commands\SendEmailsCommand;
$schedule->command['emails:send Taylor --force']->daily[];
$schedule->command[SendEmailsCommand::class, ['Taylor', '--force']]->daily[];
Lên lịch công việc xếp hàng đợi
Phương thức
// Dispatch the job to the "heartbeats" queue on the "sqs" connection...
$schedule->job[new Heartbeat, 'heartbeats', 'sqs']->everyFiveMinutes[];
3 có thể được sử dụng để lên lịch cho một công việc đã xếp hàng. Phương pháp này cung cấp một cách thuận tiện để lên lịch cho các công việc đã xếp hàng mà không cần sử dụng phương thức // Dispatch the job to the "heartbeats" queue on the "sqs" connection...
$schedule->job[new Heartbeat, 'heartbeats', 'sqs']->everyFiveMinutes[];
4 để xác định các bao đóng để xếp hàng cho công việc$schedule->job[new Heartbeat]->everyFiveMinutes[];
Các đối số thứ hai và thứ ba tùy chọn có thể được cung cấp cho phương thức
// Dispatch the job to the "heartbeats" queue on the "sqs" connection...
$schedule->job[new Heartbeat, 'heartbeats', 'sqs']->everyFiveMinutes[];
3 chỉ định tên hàng đợi và kết nối hàng đợi sẽ được sử dụng để xếp hàng công việc// Dispatch the job to the "heartbeats" queue on the "sqs" connection...
$schedule->job[new Heartbeat, 'heartbeats', 'sqs']->everyFiveMinutes[];
Lập kế hoạch lệnh Shell
Phương pháp
// Dispatch the job to the "heartbeats" queue on the "sqs" connection...
$schedule->job[new Heartbeat, 'heartbeats', 'sqs']->everyFiveMinutes[];
6 có thể được sử dụng để đưa ra lệnh cho hệ điều hành$schedule->job[new Heartbeat]->everyFiveMinutes[];
6Lịch trình tùy chọn tần suất
Chúng ta đã thấy một vài ví dụ về cách bạn có thể định cấu hình một tác vụ để chạy theo các khoảng thời gian được chỉ định. Tuy nhiên, có nhiều tần suất lịch trình nhiệm vụ khác mà bạn có thể gán cho một nhiệm vụ
Phương pháp Mô tả// Dispatch the job to the "heartbeats" queue on the "sqs" connection...
$schedule->job[new Heartbeat, 'heartbeats', 'sqs']->everyFiveMinutes[];
7Chạy nhiệm vụ theo lịch trình cron tùy chỉnh// Dispatch the job to the "heartbeats" queue on the "sqs" connection...
$schedule->job[new Heartbeat, 'heartbeats', 'sqs']->everyFiveMinutes[];
8Chạy nhiệm vụ mỗi phút// Dispatch the job to the "heartbeats" queue on the "sqs" connection...
$schedule->job[new Heartbeat, 'heartbeats', 'sqs']->everyFiveMinutes[];
9Chạy nhiệm vụ mỗi hai phút$schedule->job[new Heartbeat]->everyFiveMinutes[];
60Chạy nhiệm vụ mỗi ba phút$schedule->job[new Heartbeat]->everyFiveMinutes[];
61Chạy nhiệm vụ mỗi bốn phút$schedule->job[new Heartbeat]->everyFiveMinutes[];
62Chạy nhiệm vụ mỗi năm phút$schedule->job[new Heartbeat]->everyFiveMinutes[];
63Chạy nhiệm vụ mỗi mười phút$schedule->job[new Heartbeat]->everyFiveMinutes[];
64Chạy nhiệm vụ mỗi mười lăm phút$schedule->job[new Heartbeat]->everyFiveMinutes[];
65Chạy nhiệm vụ mỗi ba mươi phút____166Chạy nhiệm vụ mỗi mười lăm phút . 00$schedule->job[new Heartbeat]->everyFiveMinutes[];
05Chạy nhiệm vụ hàng ngày lúc 1. 00 & 13. 00$schedule->job[new Heartbeat]->everyFiveMinutes[];
06Chạy nhiệm vụ hàng ngày lúc 1. 15 & 13. 15$schedule->job[new Heartbeat]->everyFiveMinutes[];
07Chạy nhiệm vụ lúc 00 chủ nhật hàng tuần. 00$schedule->job[new Heartbeat]->everyFiveMinutes[];
08Chạy nhiệm vụ hàng tuần vào thứ Hai lúc 8 giờ. 00$schedule->job[new Heartbeat]->everyFiveMinutes[];
09Chạy nhiệm vụ vào ngày đầu tiên hàng tháng lúc 00. 00use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use Illuminate\Support\Facades\DB;
class Kernel extends ConsoleKernel
* Define the application's command schedule.
* @param \Illuminate\Console\Scheduling\Schedule $schedule
protected function schedule[Schedule $schedule]
$schedule->call[function [] {
DB::table['recent_users']->delete[];
00Chạy nhiệm vụ hàng tháng vào ngày 4 lúc 15. 00use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use Illuminate\Support\Facades\DB;
class Kernel extends ConsoleKernel
* Define the application's command schedule.
* @param \Illuminate\Console\Scheduling\Schedule $schedule
protected function schedule[Schedule $schedule]
$schedule->call[function [] {
DB::table['recent_users']->delete[];
01Chạy nhiệm vụ hàng tháng vào ngày 1 và 16 lúc 13. 00use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use Illuminate\Support\Facades\DB;
class Kernel extends ConsoleKernel
* Define the application's command schedule.
* @param \Illuminate\Console\Scheduling\Schedule $schedule
protected function schedule[Schedule $schedule]
$schedule->call[function [] {
DB::table['recent_users']->delete[];
02Chạy nhiệm vụ vào ngày cuối cùng của tháng lúc 15. 00use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use Illuminate\Support\Facades\DB;
class Kernel extends ConsoleKernel
* Define the application's command schedule.
* @param \Illuminate\Console\Scheduling\Schedule $schedule
protected function schedule[Schedule $schedule]
$schedule->call[function [] {
DB::table['recent_users']->delete[];
03Chạy nhiệm vụ vào ngày đầu tiên của mỗi quý lúc 00. 00use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use Illuminate\Support\Facades\DB;
class Kernel extends ConsoleKernel
* Define the application's command schedule.
* @param \Illuminate\Console\Scheduling\Schedule $schedule
protected function schedule[Schedule $schedule]
$schedule->call[function [] {
DB::table['recent_users']->delete[];
04Chạy nhiệm vụ hàng quý vào ngày 4 lúc 14 giờ. 00use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use Illuminate\Support\Facades\DB;
class Kernel extends ConsoleKernel
* Define the application's command schedule.
* @param \Illuminate\Console\Scheduling\Schedule $schedule
protected function schedule[Schedule $schedule]
$schedule->call[function [] {
DB::table['recent_users']->delete[];
05Chạy nhiệm vụ vào ngày đầu tiên hàng năm lúc 00. 00use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use Illuminate\Support\Facades\DB;
class Kernel extends ConsoleKernel
* Define the application's command schedule.
* @param \Illuminate\Console\Scheduling\Schedule $schedule
protected function schedule[Schedule $schedule]
$schedule->call[function [] {
DB::table['recent_users']->delete[];
06Chạy nhiệm vụ hàng năm vào ngày 1 tháng 6 lúc 17. 00use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use Illuminate\Support\Facades\DB;
class Kernel extends ConsoleKernel
* Define the application's command schedule.
* @param \Illuminate\Console\Scheduling\Schedule $schedule
protected function schedule[Schedule $schedule]
$schedule->call[function [] {
DB::table['recent_users']->delete[];
07Đặt múi giờ cho tác vụCác phương pháp này có thể được kết hợp với các ràng buộc bổ sung để tạo ra các lịch trình tinh chỉnh hơn nữa chỉ chạy vào một số ngày nhất định trong tuần. Ví dụ: bạn có thể lên lịch chạy lệnh hàng tuần vào Thứ Hai
$schedule->job[new Heartbeat]->everyFiveMinutes[];
0Một danh sách các ràng buộc lịch trình bổ sung có thể được tìm thấy dưới đây
Phương pháp Mô tảuse Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use Illuminate\Support\Facades\DB;
class Kernel extends ConsoleKernel
* Define the application's command schedule.
* @param \Illuminate\Console\Scheduling\Schedule $schedule
protected function schedule[Schedule $schedule]
$schedule->call[function [] {
DB::table['recent_users']->delete[];
08Giới hạn nhiệm vụ vào các ngày trong tuầnuse Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use Illuminate\Support\Facades\DB;
class Kernel extends ConsoleKernel
* Define the application's command schedule.
* @param \Illuminate\Console\Scheduling\Schedule $schedule
protected function schedule[Schedule $schedule]
$schedule->call[function [] {
DB::table['recent_users']->delete[];
09Giới hạn nhiệm vụ vào các ngày cuối tuần// Dispatch the job to the "heartbeats" queue on the "sqs" connection...
$schedule->job[new Heartbeat, 'heartbeats', 'sqs']->everyFiveMinutes[];
10Giới hạn nhiệm vụ vào Chủ Nhật// Dispatch the job to the "heartbeats" queue on the "sqs" connection...
$schedule->job[new Heartbeat, 'heartbeats', 'sqs']->everyFiveMinutes[];
11Giới hạn nhiệm vụ vào Thứ Hai// Dispatch the job to the "heartbeats" queue on the "sqs" connection...
$schedule->job[new Heartbeat, 'heartbeats', 'sqs']->everyFiveMinutes[];
12Giới hạn nhiệm vụ vào Thứ Ba// Dispatch the job to the "heartbeats" queue on the "sqs" connection...
$schedule->job[new Heartbeat, 'heartbeats', 'sqs']->everyFiveMinutes[];
13Giới hạn nhiệm vụ vào Thứ Tư// Dispatch the job to the "heartbeats" queue on the "sqs" connection...
$schedule->job[new Heartbeat, 'heartbeats', 'sqs']->everyFiveMinutes[];
14Giới hạn nhiệm vụ vào Thứ Năm// Dispatch the job to the "heartbeats" queue on the "sqs" connection...
$schedule->job[new Heartbeat, 'heartbeats', 'sqs']->everyFiveMinutes[];
15Giới hạn nhiệm vụ vào Thứ Sáu// Dispatch the job to the "heartbeats" queue on the "sqs" connection...
$schedule->job[new Heartbeat, 'heartbeats', 'sqs']->everyFiveMinutes[];
16Giới hạn nhiệm vụ vào Thứ Bảy// Dispatch the job to the "heartbeats" queue on the "sqs" connection...
$schedule->job[new Heartbeat, 'heartbeats', 'sqs']->everyFiveMinutes[];
17Giới hạn nhiệm vụ vào các ngày cụ thể// Dispatch the job to the "heartbeats" queue on the "sqs" connection...
$schedule->job[new Heartbeat, 'heartbeats', 'sqs']->everyFiveMinutes[];
18Giới hạn nhiệm vụ vào các ngày bắt đầu và kết thúc để chạy Ràng buộc ngày
Phương pháp
$schedule->call[new DeleteRecentUsers]->daily[];
12 có thể được sử dụng để giới hạn việc thực hiện một tác vụ trong những ngày cụ thể trong tuần. Ví dụ: bạn có thể lên lịch cho lệnh chạy hàng giờ vào Chủ Nhật và Thứ Tưuse Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use Illuminate\Support\Facades\DB;
class Kernel extends ConsoleKernel
* Define the application's command schedule.
* @param \Illuminate\Console\Scheduling\Schedule $schedule
protected function schedule[Schedule $schedule]
$schedule->call[function [] {
DB::table['recent_users']->delete[];
0Ngoài ra, bạn có thể sử dụng các hằng số có sẵn trên lớp
$schedule->call[new DeleteRecentUsers]->daily[];
13 khi xác định ngày mà tác vụ sẽ chạy// Dispatch the job to the "heartbeats" queue on the "sqs" connection...
$schedule->job[new Heartbeat, 'heartbeats', 'sqs']->everyFiveMinutes[];
1Giữa những ràng buộc về thời gian
Phương pháp
$schedule->call[new DeleteRecentUsers]->daily[];
14 có thể được sử dụng để giới hạn việc thực thi tác vụ dựa trên thời gian trong ngày$schedule->call[new DeleteRecentUsers]->daily[];
1Tương tự, phương pháp
$schedule->call[new DeleteRecentUsers]->daily[];
15 có thể được sử dụng để loại trừ việc thực hiện một tác vụ trong một khoảng thời gian$schedule->call[new DeleteRecentUsers]->daily[];
0Ràng buộc kiểm tra sự thật
Phương pháp
$schedule->call[new DeleteRecentUsers]->daily[];
16 có thể được sử dụng để giới hạn việc thực hiện một tác vụ dựa trên kết quả của một bài kiểm tra sự thật đã cho. Nói cách khác, nếu bao đóng đã cho trả về $schedule->call[new DeleteRecentUsers]->daily[];
17, tác vụ sẽ thực thi miễn là không có điều kiện ràng buộc nào khác ngăn tác vụ chạy$schedule->call[new DeleteRecentUsers]->daily[];
1Phương pháp
$schedule->call[new DeleteRecentUsers]->daily[];
18 có thể được coi là nghịch đảo của $schedule->call[new DeleteRecentUsers]->daily[];
16. Nếu phương thức $schedule->call[new DeleteRecentUsers]->daily[];
18 trả về $schedule->call[new DeleteRecentUsers]->daily[];
17, tác vụ đã lên lịch sẽ không được thực thi$schedule->call[new DeleteRecentUsers]->daily[];
2Khi sử dụng các phương thức
$schedule->call[new DeleteRecentUsers]->daily[];
16 được xâu chuỗi, lệnh đã lên lịch sẽ chỉ thực thi nếu tất cả các điều kiện của $schedule->call[new DeleteRecentUsers]->daily[];
16 trả về $schedule->call[new DeleteRecentUsers]->daily[];
17Ràng buộc môi trường
Phương pháp
$schedule->call[new DeleteRecentUsers]->daily[];
05 chỉ có thể được sử dụng để thực thi các tác vụ trên các môi trường nhất định [như được xác định bởi $schedule->call[new DeleteRecentUsers]->daily[];
06 ]$schedule->call[new DeleteRecentUsers]->daily[];
3Múi giờ
Sử dụng phương pháp ________ 607, bạn có thể chỉ định rằng thời gian tác vụ theo lịch trình sẽ được diễn giải trong một múi giờ nhất định
$schedule->call[new DeleteRecentUsers]->daily[];
4Nếu bạn liên tục chỉ định cùng một múi giờ cho tất cả các tác vụ đã lên lịch của mình, bạn có thể định nghĩa một phương thức
$schedule->call[new DeleteRecentUsers]->daily[];
08 trong lớp $schedule->job[new Heartbeat]->everyFiveMinutes[];
9 của mình. Phương thức này sẽ trả về múi giờ mặc định sẽ được gán cho tất cả các tác vụ đã lên lịch$schedule->call[new DeleteRecentUsers]->daily[];
5Cảnh báo
Hãy nhớ rằng một số múi giờ sử dụng giờ mùa hè. Khi thay đổi thời gian tiết kiệm ánh sáng ban ngày xảy ra, tác vụ theo lịch trình của bạn có thể chạy hai lần hoặc thậm chí không chạy chút nào. Vì lý do này, chúng tôi khuyên bạn nên tránh lập lịch theo múi giờ khi có thể.
Ngăn chặn chồng chéo nhiệm vụ
Theo mặc định, các tác vụ đã lên lịch sẽ được chạy ngay cả khi phiên bản trước của tác vụ đó vẫn đang chạy. Để ngăn chặn điều này, bạn có thể sử dụng phương pháp
$schedule->call[new DeleteRecentUsers]->daily[];
10$schedule->call[new DeleteRecentUsers]->daily[];
6Trong ví dụ này, lệnh Artisan
$schedule->call[new DeleteRecentUsers]->daily[];
11 sẽ được chạy mỗi phút nếu nó chưa chạy. Phương pháp $schedule->call[new DeleteRecentUsers]->daily[];
10 đặc biệt hữu ích nếu bạn có các tác vụ thay đổi đáng kể về thời gian thực hiện, khiến bạn không thể dự đoán chính xác thời gian thực hiện một tác vụ nhất địnhNếu cần, bạn có thể chỉ định bao nhiêu phút phải trôi qua trước khi khóa "không chồng chéo" hết hạn. Theo mặc định, khóa sẽ hết hạn sau 24 giờ
$schedule->call[new DeleteRecentUsers]->daily[];
7Đằng sau hậu trường, phương pháp
$schedule->call[new DeleteRecentUsers]->daily[];
10 sử dụng bộ nhớ cache của ứng dụng của bạn để lấy khóa. Nếu cần, bạn có thể xóa khóa bộ đệm bằng lệnh Artisan ________ 614. Điều này thường chỉ cần thiết nếu một tác vụ bị kẹt do sự cố máy chủ không mong muốnChạy các tác vụ trên một máy chủ
Cảnh báo
Để sử dụng tính năng này, ứng dụng của bạn phải sử dụng trình điều khiển bộ đệm ẩn15,
$schedule->call[new DeleteRecentUsers]->daily[];
16,
$schedule->call[new DeleteRecentUsers]->daily[];
17 hoặc
$schedule->call[new DeleteRecentUsers]->daily[];
18 làm trình điều khiển bộ đệm mặc định cho ứng dụng của bạn. Ngoài ra, tất cả các máy chủ phải giao tiếp với cùng một máy chủ bộ đệm trung tâm.
$schedule->call[new DeleteRecentUsers]->daily[];
Nếu bộ lập lịch của ứng dụng của bạn đang chạy trên nhiều máy chủ, bạn có thể giới hạn một công việc đã lên lịch chỉ thực thi trên một máy chủ. Chẳng hạn, giả sử bạn có một nhiệm vụ đã lên lịch để tạo báo cáo mới vào mỗi tối thứ Sáu. Nếu bộ lập lịch tác vụ đang chạy trên ba máy chủ worker, thì tác vụ đã lên lịch sẽ chạy trên cả ba máy chủ và tạo báo cáo ba lần. Không tốt
Để chỉ ra rằng tác vụ chỉ nên chạy trên một máy chủ, hãy sử dụng phương pháp
$schedule->call[new DeleteRecentUsers]->daily[];
19 khi xác định tác vụ theo lịch trình. Máy chủ đầu tiên nhận nhiệm vụ sẽ đảm bảo khóa nguyên tử trong công việc để ngăn các máy chủ khác chạy cùng một nhiệm vụ cùng một lúc$schedule->call[new DeleteRecentUsers]->daily[];
8Đặt tên công việc máy chủ đơn
Đôi khi bạn có thể cần lên lịch gửi cùng một công việc với các tham số khác nhau, trong khi vẫn hướng dẫn Laravel chạy từng hoán vị của công việc trên một máy chủ. Để thực hiện điều này, bạn có thể gán cho mỗi định nghĩa lịch biểu một tên duy nhất thông qua phương thức
$schedule->call[new DeleteRecentUsers]->daily[];
20$schedule->call[new DeleteRecentUsers]->daily[];
9Tương tự, các lần đóng theo lịch trình phải được gán tên nếu chúng được dự định chạy trên một máy chủ
use App\Console\Commands\SendEmailsCommand;
$schedule->command['emails:send Taylor --force']->daily[];
$schedule->command[SendEmailsCommand::class, ['Taylor', '--force']]->daily[];
0Nhiệm vụ nền
Theo mặc định, nhiều tác vụ được lên lịch cùng lúc sẽ thực thi tuần tự dựa trên thứ tự chúng được xác định trong phương thức
$schedule->job[new Heartbeat]->everyFiveMinutes[];
7 của bạn. Nếu bạn có các tác vụ chạy trong thời gian dài, điều này có thể khiến các tác vụ tiếp theo bắt đầu muộn hơn nhiều so với dự kiến. Nếu bạn muốn chạy các tác vụ ở chế độ nền để tất cả chúng có thể chạy đồng thời, bạn có thể sử dụng phương pháp $schedule->call[new DeleteRecentUsers]->daily[];
22use App\Console\Commands\SendEmailsCommand;
$schedule->command['emails:send Taylor --force']->daily[];
$schedule->command[SendEmailsCommand::class, ['Taylor', '--force']]->daily[];
1Cảnh báo
Phương pháp22 chỉ có thể được sử dụng khi lập lịch tác vụ thông qua phương pháp
$schedule->call[new DeleteRecentUsers]->daily[];
2 và
// Dispatch the job to the "heartbeats" queue on the "sqs" connection...
$schedule->job[new Heartbeat, 'heartbeats', 'sqs']->everyFiveMinutes[];
6.
// Dispatch the job to the "heartbeats" queue on the "sqs" connection...
$schedule->job[new Heartbeat, 'heartbeats', 'sqs']->everyFiveMinutes[];
Chế độ bảo trì
Các tác vụ đã lên lịch của ứng dụng của bạn sẽ không chạy khi ứng dụng ở chế độ , vì chúng tôi không muốn các tác vụ của bạn can thiệp vào bất kỳ hoạt động bảo trì chưa hoàn thành nào mà bạn có thể đang thực hiện trên máy chủ của mình. Tuy nhiên, nếu bạn muốn buộc một tác vụ chạy ngay cả trong chế độ bảo trì, bạn có thể gọi phương thức
$schedule->call[new DeleteRecentUsers]->daily[];
26 khi xác định tác vụuse App\Console\Commands\SendEmailsCommand;
$schedule->command['emails:send Taylor --force']->daily[];
$schedule->command[SendEmailsCommand::class, ['Taylor', '--force']]->daily[];
2Chạy bộ lập lịch
Bây giờ chúng ta đã học cách xác định các tác vụ theo lịch trình, hãy thảo luận về cách thực sự chạy chúng trên máy chủ của chúng ta. Lệnh
$schedule->call[new DeleteRecentUsers]->daily[];
27 Artisan sẽ đánh giá tất cả các tác vụ đã lên lịch của bạn và xác định xem chúng có cần chạy hay không dựa trên thời gian hiện tại của máy chủVì vậy, khi sử dụng bộ lập lịch của Laravel, chúng ta chỉ cần thêm một mục cấu hình cron duy nhất vào máy chủ của mình để chạy lệnh
$schedule->call[new DeleteRecentUsers]->daily[];
27 mỗi phút. Nếu bạn không biết cách thêm các mục cron vào máy chủ của mình, hãy cân nhắc sử dụng một dịch vụ như Laravel Forge có thể quản lý các mục cron cho bạnuse App\Console\Commands\SendEmailsCommand;
$schedule->command['emails:send Taylor --force']->daily[];
$schedule->command[SendEmailsCommand::class, ['Taylor', '--force']]->daily[];
3Chạy bộ lập lịch cục bộ
Thông thường, bạn sẽ không thêm một mục cron lập lịch trình vào máy phát triển cục bộ của mình. Thay vào đó, bạn có thể sử dụng lệnh
$schedule->call[new DeleteRecentUsers]->daily[];
29 Artisan. Lệnh này sẽ chạy ở nền trước và gọi bộ lập lịch mỗi phút cho đến khi bạn chấm dứt lệnhĐầu ra nhiệm vụ
Bộ lập lịch của Laravel cung cấp một số phương thức thuận tiện để làm việc với đầu ra được tạo bởi các tác vụ đã lên lịch. Đầu tiên, sử dụng phương pháp
$schedule->call[new DeleteRecentUsers]->daily[];
30, bạn có thể gửi đầu ra tới một tệp để kiểm tra sauuse App\Console\Commands\SendEmailsCommand;
$schedule->command['emails:send Taylor --force']->daily[];
$schedule->command[SendEmailsCommand::class, ['Taylor', '--force']]->daily[];
4Nếu bạn muốn nối đầu ra vào một tệp nhất định, bạn có thể sử dụng phương thức
$schedule->call[new DeleteRecentUsers]->daily[];
31use App\Console\Commands\SendEmailsCommand;
$schedule->command['emails:send Taylor --force']->daily[];
$schedule->command[SendEmailsCommand::class, ['Taylor', '--force']]->daily[];
5Sử dụng phương pháp
$schedule->call[new DeleteRecentUsers]->daily[];
32, bạn có thể gửi email đầu ra tới địa chỉ email bạn chọn. Trước khi gửi email đầu ra của một tác vụ, bạn nên định cấu hình các dịch vụ email của Laraveluse App\Console\Commands\SendEmailsCommand;
$schedule->command['emails:send Taylor --force']->daily[];
$schedule->command[SendEmailsCommand::class, ['Taylor', '--force']]->daily[];
6Nếu bạn chỉ muốn gửi kết quả qua email nếu lệnh Artisan hoặc lệnh hệ thống đã lên lịch kết thúc với mã thoát khác không, hãy sử dụng phương thức
$schedule->call[new DeleteRecentUsers]->daily[];
33$schedule->call[new DeleteRecentUsers]->daily[];
8Cảnh báo
Các phương thức32,
$schedule->call[new DeleteRecentUsers]->daily[];
33,
$schedule->call[new DeleteRecentUsers]->daily[];
30 và
$schedule->call[new DeleteRecentUsers]->daily[];
31 chỉ dành riêng cho các phương thức
$schedule->call[new DeleteRecentUsers]->daily[];
2 và
// Dispatch the job to the "heartbeats" queue on the "sqs" connection...
$schedule->job[new Heartbeat, 'heartbeats', 'sqs']->everyFiveMinutes[];
6.
// Dispatch the job to the "heartbeats" queue on the "sqs" connection...
$schedule->job[new Heartbeat, 'heartbeats', 'sqs']->everyFiveMinutes[];
Móc nhiệm vụ
Sử dụng các phương thức
$schedule->call[new DeleteRecentUsers]->daily[];
40 và $schedule->call[new DeleteRecentUsers]->daily[];
41, bạn có thể chỉ định mã sẽ được thực thi trước và sau khi tác vụ theo lịch trình được thực thiuse App\Console\Commands\SendEmailsCommand;
$schedule->command['emails:send Taylor --force']->daily[];
$schedule->command[SendEmailsCommand::class, ['Taylor', '--force']]->daily[];
8Các phương thức
$schedule->call[new DeleteRecentUsers]->daily[];
42 và $schedule->call[new DeleteRecentUsers]->daily[];
43 cho phép bạn chỉ định mã sẽ được thực thi nếu tác vụ theo lịch trình thành công hay thất bại. Lỗi chỉ ra rằng lệnh hệ thống hoặc Thủ công đã lên lịch đã kết thúc bằng mã thoát khác khônguse Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use Illuminate\Support\Facades\DB;
class Kernel extends ConsoleKernel
* Define the application's command schedule.
* @param \Illuminate\Console\Scheduling\Schedule $schedule
protected function schedule[Schedule $schedule]
$schedule->call[function [] {
DB::table['recent_users']->delete[];
0Nếu đầu ra có sẵn từ lệnh của bạn, bạn có thể truy cập nó trong các hook
$schedule->call[new DeleteRecentUsers]->daily[];
41, $schedule->call[new DeleteRecentUsers]->daily[];
42 hoặc $schedule->call[new DeleteRecentUsers]->daily[];
43 của mình bằng cách gợi ý kiểu một thể hiện $schedule->call[new DeleteRecentUsers]->daily[];
47 làm đối số $schedule->call[new DeleteRecentUsers]->daily[];
48 của định nghĩa đóng hook của bạn$schedule->job[new Heartbeat]->everyFiveMinutes[];
0URL ping
Sử dụng các phương pháp
$schedule->call[new DeleteRecentUsers]->daily[];
49 và $schedule->call[new DeleteRecentUsers]->daily[];
50, bộ lập lịch có thể tự động ping một URL nhất định trước hoặc sau khi một tác vụ được thực thi. Phương pháp này hữu ích để thông báo cho một dịch vụ bên ngoài, chẳng hạn như Envoyer, rằng tác vụ theo lịch trình của bạn đang bắt đầu hoặc đã hoàn thành thực thiuse Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use Illuminate\Support\Facades\DB;
class Kernel extends ConsoleKernel
* Define the application's command schedule.
* @param \Illuminate\Console\Scheduling\Schedule $schedule
protected function schedule[Schedule $schedule]
$schedule->call[function [] {
DB::table['recent_users']->delete[];
0Các phương pháp
$schedule->call[new DeleteRecentUsers]->daily[];
51 và $schedule->call[new DeleteRecentUsers]->daily[];
52 chỉ có thể được sử dụng để ping một URL nhất định nếu một điều kiện nhất định là $schedule->call[new DeleteRecentUsers]->daily[];
17$schedule->job[new Heartbeat]->everyFiveMinutes[];
2Các phương pháp
$schedule->call[new DeleteRecentUsers]->daily[];
54 và $schedule->call[new DeleteRecentUsers]->daily[];
55 chỉ có thể được sử dụng để ping một URL nhất định nếu tác vụ thành công hoặc thất bại. Lỗi chỉ ra rằng lệnh hệ thống hoặc Thủ công đã lên lịch đã kết thúc bằng mã thoát khác không$schedule->job[new Heartbeat]->everyFiveMinutes[];
3Tất cả các phương thức ping đều yêu cầu thư viện Guzzle HTTP. Theo mặc định, Guzzle thường được cài đặt trong tất cả các dự án Laravel mới, nhưng bạn có thể cài đặt Guzzle vào dự án của mình theo cách thủ công bằng trình quản lý gói Composer nếu nó vô tình bị xóa
$schedule->job[new Heartbeat]->everyFiveMinutes[];
4Sự kiện
Nếu cần, bạn có thể nghe các sự kiện được gửi bởi bộ lập lịch. Thông thường, ánh xạ trình xử lý sự kiện sẽ được xác định trong lớp
$schedule->call[new DeleteRecentUsers]->daily[];
56 của ứng dụng của bạn