Làm cách nào để chạy một bài kiểm tra đơn vị trong laravel?

Lập lịch tác vụ là một kỹ thuật hữu ích để tự động hóa các tác vụ lặp đi lặp lại khác nhau dựa trên lịch trình. Những nhiệm vụ hoặc công việc như vậy có thể mang tính chất quan trọng [chẳng hạn như sao lưu cơ sở dữ liệu] hoặc có thể đơn giản như gửi email hàng tuần cho chính bạn hoặc khách hàng của bạn. Chạy thủ công các công việc như vậy có thể trở nên tẻ nhạt rất nhanh, vì vậy giải pháp tốt hơn là tự động hóa và giám sát chúng để chúng có thể chạy kịp thời một cách có thể dự đoán được

Cách truyền thống để lên lịch tác vụ trên các ứng dụng được triển khai trên máy chủ Linux là thông qua tiện ích cron. Tuy nhiên, hệ thống như vậy phải được triển khai riêng biệt với ứng dụng, điều này có thể khá hạn chế

Laravel cung cấp một cách tiếp cận toàn diện để lập lịch tác vụ thông qua bộ lập lịch lệnh của nó, cho phép bạn lên lịch các tác vụ trong chính ứng dụng đó. Trong hướng dẫn này, chúng ta sẽ khám phá cách tạo các công việc theo lịch trình trong Laravel và chúng tôi cũng sẽ triển khai một giải pháp giám sát để giúp bạn thông báo kịp thời nếu một tác vụ theo lịch trình không thành công hoặc không chạy như mong đợi

điều kiện tiên quyết

Trước khi tiếp tục với bài viết này, hãy đảm bảo rằng bạn có quyền truy cập vào máy Linux đã cài đặt các phiên bản Cron, PHP  và Composer  gần đây

Bạn cũng nên tạo một dự án Laravel mới để có thể kiểm tra các đoạn mã trong hướng dẫn này. Giả sử PHP và Composer đã được cài đặt, bạn có thể tiến hành tạo dự án Laravel bằng lệnh sau

composer create-project laravel/laravel 

Bắt đầu

Dự án Laravel mới của bạn nên có cấu trúc như sau

.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js

Đối với hướng dẫn này, chúng tôi chỉ quan tâm đến thư mục

Laravel Framework 9.33.0

. . .

about Display basic information about your application

clear-compiled Remove the compiled class file

view:cache Compile all of the application's Blade templates

view:clear Clear all compiled view files

5 vì tất cả các công việc được lên lịch trong Laravel được xác định trong tệp
Laravel Framework 9.33.0

. . .

about Display basic information about your application

clear-compiled Remove the compiled class file

view:cache Compile all of the application's Blade templates

view:clear Clear all compiled view files

6

Hãy tiếp tục và mở tệp bằng lệnh sau

nano app\Console\Kernel.php

command["inspire"]->hourly[];
    }

    /**
     * Register the commands for the application.
     *
     * @return void
     */
    protected function commands[]
    {
        $this->load[__DIR__ . "/Commands"];

        require base_path["routes/console.php"];
    }
}

Lưu ý hàm

Laravel Framework 9.33.0

. . .

about Display basic information about your application

clear-compiled Remove the compiled class file

view:cache Compile all of the application's Blade templates

view:clear Clear all compiled view files

7 được đánh dấu ở trên. Đó là nơi bạn có thể lên lịch cho các tác vụ của mình và Laravel cung cấp một ví dụ về cách nó được thực hiện trong hàm

$schedule->command["inspire"]->hourly[];

Dòng này được chú thích theo mặc định, nhưng bạn nên bỏ ghi chú trước khi tiếp tục. Biến

Laravel Framework 9.33.0

. . .

about Display basic information about your application

clear-compiled Remove the compiled class file

view:cache Compile all of the application's Blade templates

view:clear Clear all compiled view files

8 là một thể hiện của lớp
Laravel Framework 9.33.0

. . .

about Display basic information about your application

clear-compiled Remove the compiled class file

view:cache Compile all of the application's Blade templates

view:clear Clear all compiled view files

9 được tích hợp trong Laravel. Phương pháp
$schedule->command['inspire']->everyMinute[];
0 của nó sẽ lên lịch hiển thị một trích dẫn đầy cảm hứng trong bảng điều khiển

Để xem danh sách tất cả các lệnh Artisan có sẵn, hãy chạy lệnh bên dưới trong thiết bị đầu cuối từ gốc dự án của bạn

Bạn sẽ quan sát danh sách lệnh cùng với mô tả ngắn gọn về những gì họ làm

Laravel Framework 9.33.0

. . .

about Display basic information about your application

clear-compiled Remove the compiled class file

view:cache Compile all of the application's Blade templates

view:clear Clear all compiled view files

Sau khi chọn một lệnh, bạn phải chỉ định tần suất bạn muốn thực hiện lệnh đó. Trong ví dụ mặc định, phương thức

$schedule->command['inspire']->everyMinute[];
1 thực thi lệnh
$schedule->command['inspire']->everyMinute[];
2 mỗi giờ. Đối với mục đích trình diễn, hãy thay đổi nó thành
$schedule->command['inspire']->everyMinute[];
3 để bạn có thể thấy hiệu quả của việc lên lịch tác vụ nhanh hơn nhiều

$schedule->command['inspire']->everyMinute[];

Sau khi thực hiện thay đổi, hãy gọi bộ lập lịch bằng cách thực hiện lệnh bên dưới

Lệnh

$schedule->command['inspire']->everyMinute[];
4 sẽ duyệt qua tất cả các tác vụ đã lên lịch và xác định xem Laravel có nên thực thi tác vụ dựa trên thời gian hiện tại hay không. Ví dụ:
$schedule->command['inspire']->everyMinute[];
1 sẽ lên lịch thực hiện một nhiệm vụ vào giờ đánh dấu [xx. 00] trong khi
$schedule->command['inspire']->everyMinute[];
6 thực hiện công việc khi thời gian hiện tại là xx. x0, xx. x5, xx. 10, v.v. Nếu không có tác vụ nào hiện được lên lịch để thực thi, đầu ra sau sẽ được in ra thiết bị đầu cuối

INFO  No scheduled commands are ready to run.

Tuy nhiên, vì chúng tôi đang sử dụng

$schedule->command['inspire']->everyMinute[];
3 trong ví dụ của mình, bạn nên quan sát rằng tác vụ được thực thi và đầu ra sau đây được in ra thiết bị đầu cuối

 2022-10-06 21:42:39 Running ['artisan' inspire] ...................2,878ms DONE
 ⇂ '/usr/bin/php8.1' 'artisan' inspire > '/dev/null' 2>&1

Lưu ý rằng thông báo tường trình mô tả lệnh đã thực hiện được in nhưng kết quả không được hiển thị. Đó là bởi vì Laravel tự động bỏ qua đầu ra của một tác vụ đã lên lịch bằng cách chuyển tiếp nó tới

$schedule->command['inspire']->everyMinute[];
8 [xem dòng thứ hai của đầu ra ở trên] vì chúng thường chạy trong nền

Nếu bạn cần sử dụng đầu ra của nhiệm vụ đã lên lịch của mình, bạn có thể đặt nó vào một tệp để kiểm tra sau thông qua phương pháp

$schedule->command['inspire']->everyMinute[];
9

$schedule
    ->command["inspire"]
    ->everyMinute[]

->sendOutputTo["scheduler-output.log"];

Sau khi thực hiện thay đổi trên, hãy gọi lại bộ lập lịch và xem nội dung của tệp

INFO  No scheduled commands are ready to run.
0 được tạo sau đó

.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
0

Lưu ý rằng phương thức

$schedule->command['inspire']->everyMinute[];
9 sẽ ghi đè nội dung của đối số tệp của nó cho mỗi lần gọi. Nếu điều này không được mong muốn, bạn có thể sử dụng phương pháp
INFO  No scheduled commands are ready to run.
2 nối đầu ra lệnh vào cuối tệp để thay thế

.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
1

Chạy bộ lập lịch một vài lần và quan sát rằng tệp không còn bị ghi đè nữa

.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
2

Một vấn đề với lệnh

$schedule->command['inspire']->everyMinute[];
4 là nó chỉ gọi bộ lập lịch một lần, điều đó có nghĩa là các tác vụ đã lên lịch chỉ được thực hiện một lần. Để đảm bảo các tác vụ được chạy theo lịch trình, bộ lập lịch trình cần phải chạy liên tục và điều này đạt được bằng cách sử dụng lệnh
INFO  No scheduled commands are ready to run.
4 thay vì như hình bên dưới

.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
3

Lệnh này sẽ chạy ở nền trước và gọi lệnh

$schedule->command['inspire']->everyMinute[];
4 mỗi phút cho đến khi lệnh này kết thúc bằng cách nhấn
INFO  No scheduled commands are ready to run.
6. Nó rất hữu ích để kiểm tra mã của bạn trong quá trình phát triển, do đó bạn không phải gọi trình lập lịch trình theo cách thủ công mỗi lần

Trong môi trường sản xuất, bạn nên thực thi lịch trình ở chế độ nền thông qua Công việc định kỳ như hình bên dưới

.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
4

Lập kế hoạch lệnh hệ thống

Ngoài các lệnh Artisan, bạn cũng có thể lên lịch thực hiện bất kỳ lệnh hệ thống nào bằng phương thức

INFO  No scheduled commands are ready to run.
7 như sau

.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
5

Các phương pháp

$schedule->command['inspire']->everyMinute[];
9 và
INFO  No scheduled commands are ready to run.
2 đã thảo luận trước đó cũng có thể được sử dụng để ghi lại đầu ra của các lệnh hệ thống

Chức năng lập lịch trình

Nếu bạn cần lên lịch một chức năng trong Laravel, bạn có thể sử dụng phương thức

 2022-10-06 21:42:39 Running ['artisan' inspire] ...................2,878ms DONE
 ⇂ '/usr/bin/php8.1' 'artisan' inspire > '/dev/null' 2>&1
0 và chuyển vào một bao đóng bao hàm chức năng như sau

.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
6

Công việc đã lên lịch sẽ chạy hàng ngày trong ví dụ này và xóa tất cả người dùng không hoạt động

Ngoài việc lên lịch đóng cửa, bạn cũng có thể lên lịch với phương thức

 2022-10-06 21:42:39 Running ['artisan' inspire] ...................2,878ms DONE
 ⇂ '/usr/bin/php8.1' 'artisan' inspire > '/dev/null' 2>&1
0. Đây là các lớp PHP chứa phương thức
 2022-10-06 21:42:39 Running ['artisan' inspire] ...................2,878ms DONE
 ⇂ '/usr/bin/php8.1' 'artisan' inspire > '/dev/null' 2>&1
2. Khi một phiên bản mới của lớp được cung cấp cho phương thức
 2022-10-06 21:42:39 Running ['artisan' inspire] ...................2,878ms DONE
 ⇂ '/usr/bin/php8.1' 'artisan' inspire > '/dev/null' 2>&1
0, phương thức
 2022-10-06 21:42:39 Running ['artisan' inspire] ...................2,878ms DONE
 ⇂ '/usr/bin/php8.1' 'artisan' inspire > '/dev/null' 2>&1
2 của nó sẽ được thực thi theo lịch trình đã chỉ định

.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
7

Lập kế hoạch công việc xếp hàng đợi

thường là các tác vụ chạy trong thời gian dài được xử lý ở chế độ nền để tránh can thiệp vào các quy trình chính của ứng dụng. Các tác vụ như vậy có thể được thực hiện theo một lịch trình đã xác định bằng cách sử dụng phương thức

 2022-10-06 21:42:39 Running ['artisan' inspire] ...................2,878ms DONE
 ⇂ '/usr/bin/php8.1' 'artisan' inspire > '/dev/null' 2>&1
5 trên bộ lập lịch biểu

Chẳng hạn, bạn có thể sử dụng tính năng này để cập nhật chỉ mục tìm kiếm của ứng dụng mỗi giờ một lần như sau

.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
8

Nếu bạn đang sử dụng dịch vụ của bên thứ ba [chẳng hạn như Amazon SQS] để xử lý các công việc được xếp hàng đợi của mình, thì bạn cũng cần chỉ định tên của công việc và dịch vụ bạn đang sử dụng để kết nối hàng đợi thích hợp sẽ được sử dụng để xếp hàng công việc

.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
9

Liệt kê tất cả các nhiệm vụ theo lịch trình

Bạn có thể lấy danh sách tất cả các tác vụ đã lên lịch bằng lệnh bên dưới. Nó hiển thị từng tác vụ đã lên lịch và thời gian gọi tiếp theo của chúng

nano app\Console\Kernel.php
0

nano app\Console\Kernel.php
1

Chạy các tác vụ theo lịch trình trong nền

Khi bạn có nhiều tác vụ được lên lịch để chạy đồng thời, Laravel sẽ thực hiện từng tác vụ một theo cách chúng được xác định trong tệp

 2022-10-06 21:42:39 Running ['artisan' inspire] ...................2,878ms DONE
 ⇂ '/usr/bin/php8.1' 'artisan' inspire > '/dev/null' 2>&1
6. Tuy nhiên, nếu một tác vụ cần thời gian dài để chạy, nó sẽ trì hoãn tất cả các tác vụ tiếp theo. Do đó, bạn có thể muốn chạy các tác vụ đã lên lịch của mình ở chế độ nền bằng cách sử dụng phương pháp
 2022-10-06 21:42:39 Running ['artisan' inspire] ...................2,878ms DONE
 ⇂ '/usr/bin/php8.1' 'artisan' inspire > '/dev/null' 2>&1
7 để nhiều tác vụ có thể chạy đồng thời

nano app\Console\Kernel.php
2

Lưu ý rằng chỉ có thể sử dụng

 2022-10-06 21:42:39 Running ['artisan' inspire] ...................2,878ms DONE
 ⇂ '/usr/bin/php8.1' 'artisan' inspire > '/dev/null' 2>&1
7 cho các tác vụ được lên lịch bằng các phương thức
INFO  No scheduled commands are ready to run.
7 hoặc
$schedule->command['inspire']->everyMinute[];
0

🔭 Bạn muốn nhận thông báo khi các tác vụ theo lịch trình Laravel của bạn ngừng hoạt động?

Đi đến Thời gian hoạt động tốt hơn để bắt đầu theo dõi công việc của bạn sau 2 phút

Đặt tần suất lịch trình phù hợp

Cho đến nay, chúng ta mới chỉ thấy các phương thức

$schedule->command['inspire']->everyMinute[];
1 và
$schedule->command['inspire']->everyMinute[];
3 hoạt động, nhưng Laravel cung cấp một số tùy chọn tần suất khác, có thể được phân loại thành một số loại khác nhau được thảo luận bên dưới

Tùy chọn tần số phổ biến

1. tùy chọn phút

nano app\Console\Kernel.php
3

2. Tùy chọn hàng giờ

nano app\Console\Kernel.php
4

Các tùy chọn dựa trên giờ ở trên sẽ chạy nhiệm vụ của chúng vào phút đầu tiên của giờ, nhưng thay vào đó, phương pháp

$schedule
    ->command["inspire"]
    ->everyMinute[]

->sendOutputTo["scheduler-output.log"];

3 có thể được sử dụng để chạy nhiệm vụ vào phút thứ
$schedule
    ->command["inspire"]
    ->everyMinute[]

->sendOutputTo["scheduler-output.log"];

4 của giờ

3. Tùy chọn hàng ngày

nano app\Console\Kernel.php
5

4. Tùy chọn hàng tuần

nano app\Console\Kernel.php
6

Phương pháp

$schedule
    ->command["inspire"]
    ->everyMinute[]

->sendOutputTo["scheduler-output.log"];

5 cho phép bạn chỉ định một ngày [Chủ Nhật.
$schedule
    ->command["inspire"]
    ->everyMinute[]

->sendOutputTo["scheduler-output.log"];

6, Thứ Hai.
$schedule
    ->command["inspire"]
    ->everyMinute[]

->sendOutputTo["scheduler-output.log"];

7,. , Thứ bảy.
$schedule
    ->command["inspire"]
    ->everyMinute[]

->sendOutputTo["scheduler-output.log"];

8] và thời gian, nhưng bạn cũng có thể chỉ định nhiều ngày bằng cách sử dụng một mảng

nano app\Console\Kernel.php
7

5. Tùy chọn hàng tháng

nano app\Console\Kernel.php
8

6. tùy chọn hàng năm

nano app\Console\Kernel.php
9

tùy chọn ràng buộc

Các tùy chọn ràng buộc là một tập hợp các phương thức đặc biệt xác định các ràng buộc bổ sung sau khi bạn đã chỉ định tần suất. Ví dụ: trước tiên bạn có thể lên lịch cho một công việc chạy hàng tuần rồi đặt các ràng buộc như thế này

command["inspire"]->hourly[];
    }

    /**
     * Register the commands for the application.
     *
     * @return void
     */
    protected function commands[]
    {
        $this->load[__DIR__ . "/Commands"];

        require base_path["routes/console.php"];
    }
}
0

Phương thức

$schedule
    ->command["inspire"]
    ->everyMinute[]

->sendOutputTo["scheduler-output.log"];

9 lấy một mảng các số nguyên làm đầu vào, cho phép bạn giới hạn việc thực hiện tác vụ trong các ngày cụ thể trong tuần

Bên cạnh các ràng buộc về ngày, còn có hai phương pháp ràng buộc dựa trên thời gian bổ sung,

.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
00 và
.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
01, xác định phạm vi thời gian mà một công việc được phép thực hiện

command["inspire"]->hourly[];
    }

    /**
     * Register the commands for the application.
     *
     * @return void
     */
    protected function commands[]
    {
        $this->load[__DIR__ . "/Commands"];

        require base_path["routes/console.php"];
    }
}
1

Lợi ích chính của việc sử dụng Laravel để lên lịch tác vụ là bạn có thể sử dụng thứ gì đó khác với thời gian hiện tại để kích hoạt việc thực thi tác vụ. Ví dụ: phương thức

.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
02 lấy hàm gọi lại làm đầu vào và tác vụ sẽ chỉ chạy nếu hàm trả về
.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
03

command["inspire"]->hourly[];
    }

    /**
     * Register the commands for the application.
     *
     * @return void
     */
    protected function commands[]
    {
        $this->load[__DIR__ . "/Commands"];

        require base_path["routes/console.php"];
    }
}
2

Ví dụ trên lên lịch một nhiệm vụ để thực hiện dựa trên thời tiết. Nó chỉ thực hiện vào những ngày nắng. Cái bên dưới sử dụng phương thức

.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
04 để xác định điều kiện bỏ qua một tác vụ theo lịch trình

command["inspire"]->hourly[];
    }

    /**
     * Register the commands for the application.
     *
     * @return void
     */
    protected function commands[]
    {
        $this->load[__DIR__ . "/Commands"];

        require base_path["routes/console.php"];
    }
}
3

Cuối cùng, bạn cũng có thể lên lịch các tác vụ dựa trên môi trường ứng dụng hiện tại, điều này rất hữu ích nếu bạn chỉ muốn lên lịch một số tác vụ trong sản xuất

command["inspire"]->hourly[];
    }

    /**
     * Register the commands for the application.
     *
     * @return void
     */
    protected function commands[]
    {
        $this->load[__DIR__ . "/Commands"];

        require base_path["routes/console.php"];
    }
}
4

Trong ví dụ trên, tác vụ sẽ chỉ chạy trong môi trường dàn dựng và sản xuất

Tùy chọn bổ sung

Các phương pháp lập lịch trình được thảo luận cho đến nay là đủ cho hầu hết các tình huống, nhưng Laravel cung cấp một số kỹ thuật nâng cao để tạo các lịch trình phức tạp hơn

1. Phương pháp
.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
05

Phương thức

.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
05 cho phép bạn tạo lịch biểu bằng cách sử dụng các biểu thức Cron thô. Ví dụ

command["inspire"]->hourly[];
    }

    /**
     * Register the commands for the application.
     *
     * @return void
     */
    protected function commands[]
    {
        $this->load[__DIR__ . "/Commands"];

        require base_path["routes/console.php"];
    }
}
5

Mã này sẽ lên lịch cho lệnh

$schedule->command['inspire']->everyMinute[];
2 Artisan chạy ở 04. 05 chủ nhật hàng tuần

2. Phương pháp
.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
08

Bạn có thể nhận thấy rằng một số phương pháp tần suất [chẳng hạn như

.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
09,
.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
10 và các phương pháp khác] không cho phép bạn chỉ định thời gian chính xác, điều này đôi khi có thể hạn chế. Điều này có thể được khắc phục thông qua phương pháp
.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
08 như hình bên dưới

command["inspire"]->hourly[];
    }

    /**
     * Register the commands for the application.
     *
     * @return void
     */
    protected function commands[]
    {
        $this->load[__DIR__ . "/Commands"];

        require base_path["routes/console.php"];
    }
}
6

Nếu bạn muốn lên lịch cho một nhiệm vụ ở múi giờ khác, bạn cũng có thể xâu chuỗi một phương thức

.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
12 trong lịch trình của mình như thế này

command["inspire"]->hourly[];
    }

    /**
     * Register the commands for the application.
     *
     * @return void
     */
    protected function commands[]
    {
        $this->load[__DIR__ . "/Commands"];

        require base_path["routes/console.php"];
    }
}
7

Thiết lập móc nhiệm vụ

Một tính năng hữu ích khác mà Laravel cung cấp cho việc lên lịch tác vụ là móc tác vụ. Chúng cho phép bạn thực thi một số mã trước hoặc sau khi tác vụ được thực thi hoặc nếu một điều kiện nhất định là đúng [chẳng hạn như nếu tác vụ thất bại hoặc thành công]

Ví dụ: bạn có thể ghi lại một thông báo trước và sau khi một tác vụ được thực thi như hình bên dưới. Vui lòng tham khảo bài viết được liên kết để biết thêm thông tin về cách đăng nhập Laravel. Chúng tôi cho rằng bạn đã cấu hình đúng hệ thống ghi nhật ký cho mục đích trình diễn

command["inspire"]->hourly[];
    }

    /**
     * Register the commands for the application.
     *
     * @return void
     */
    protected function commands[]
    {
        $this->load[__DIR__ . "/Commands"];

        require base_path["routes/console.php"];
    }
}
8

Nếu công việc theo lịch trình của bạn tạo ra một số đầu ra, bạn có thể truy cập nó theo phương thức

.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
13 thông qua biến
.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
14 với loại
.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
15

Một tác vụ được lên lịch có thể thành công hoặc thất bại, vì vậy Laravel cũng cung cấp các móc nối

.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
16 và
.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
17 để xử lý một trong hai kết quả

command["inspire"]->hourly[];
    }

    /**
     * Register the commands for the application.
     *
     * @return void
     */
    protected function commands[]
    {
        $this->load[__DIR__ . "/Commands"];

        require base_path["routes/console.php"];
    }
}
9

Giống như hook

.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
13, bạn có thể truy cập đầu ra thông qua
.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
19. Lưu ý rằng các hook
.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
16 và
.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
17 chỉ hoạt động đối với các tác vụ được lên lịch bằng các phương thức
$schedule->command['inspire']->everyMinute[];
0 hoặc
INFO  No scheduled commands are ready to run.
7 vì lỗi tác vụ được phát hiện thông qua mã thoát khác không

Cuối cùng, chúng ta có họ hook

.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
24 hữu ích để thông báo cho dịch vụ bên ngoài khi tác vụ theo lịch trình đã bắt đầu, hoàn thành hoặc thất bại. Dưới đây là các phương pháp có sẵn và chữ ký của họ

  • .
    ├── README.md
    │ ├── Exceptions
    │ │ └── Handler.php
    │ ├── Http
    │ │ ├── Controllers
    │ │ │ ├── Controller.php
    │ │ ├── Kernel.php
    │ │ └── Middleware
    │ ├── Models
    │ └── Providers
    ├── artisan
    ├── bootstrap
    ├── composer.json
    ├── composer.lock
    ├── config
    ├── database
    ├── package.json
    ├── php_errors.log
    ├── phpunit.xml
    ├── public
    ├── resources
    ├── routes
    ├── storage
    ├── tests
    └── vite.config.js
    
    25
  • .
    ├── README.md
    │ ├── Exceptions
    │ │ └── Handler.php
    │ ├── Http
    │ │ ├── Controllers
    │ │ │ ├── Controller.php
    │ │ ├── Kernel.php
    │ │ └── Middleware
    │ ├── Models
    │ └── Providers
    ├── artisan
    ├── bootstrap
    ├── composer.json
    ├── composer.lock
    ├── config
    ├── database
    ├── package.json
    ├── php_errors.log
    ├── phpunit.xml
    ├── public
    ├── resources
    ├── routes
    ├── storage
    ├── tests
    └── vite.config.js
    
    26
  • .
    ├── README.md
    │ ├── Exceptions
    │ │ └── Handler.php
    │ ├── Http
    │ │ ├── Controllers
    │ │ │ ├── Controller.php
    │ │ ├── Kernel.php
    │ │ └── Middleware
    │ ├── Models
    │ └── Providers
    ├── artisan
    ├── bootstrap
    ├── composer.json
    ├── composer.lock
    ├── config
    ├── database
    ├── package.json
    ├── php_errors.log
    ├── phpunit.xml
    ├── public
    ├── resources
    ├── routes
    ├── storage
    ├── tests
    └── vite.config.js
    
    27
  • .
    ├── README.md
    │ ├── Exceptions
    │ │ └── Handler.php
    │ ├── Http
    │ │ ├── Controllers
    │ │ │ ├── Controller.php
    │ │ ├── Kernel.php
    │ │ └── Middleware
    │ ├── Models
    │ └── Providers
    ├── artisan
    ├── bootstrap
    ├── composer.json
    ├── composer.lock
    ├── config
    ├── database
    ├── package.json
    ├── php_errors.log
    ├── phpunit.xml
    ├── public
    ├── resources
    ├── routes
    ├── storage
    ├── tests
    └── vite.config.js
    
    28
  • .
    ├── README.md
    │ ├── Exceptions
    │ │ └── Handler.php
    │ ├── Http
    │ │ ├── Controllers
    │ │ │ ├── Controller.php
    │ │ ├── Kernel.php
    │ │ └── Middleware
    │ ├── Models
    │ └── Providers
    ├── artisan
    ├── bootstrap
    ├── composer.json
    ├── composer.lock
    ├── config
    ├── database
    ├── package.json
    ├── php_errors.log
    ├── phpunit.xml
    ├── public
    ├── resources
    ├── routes
    ├── storage
    ├── tests
    └── vite.config.js
    
    29
  • .
    ├── README.md
    │ ├── Exceptions
    │ │ └── Handler.php
    │ ├── Http
    │ │ ├── Controllers
    │ │ │ ├── Controller.php
    │ │ ├── Kernel.php
    │ │ └── Middleware
    │ ├── Models
    │ └── Providers
    ├── artisan
    ├── bootstrap
    ├── composer.json
    ├── composer.lock
    ├── config
    ├── database
    ├── package.json
    ├── php_errors.log
    ├── phpunit.xml
    ├── public
    ├── resources
    ├── routes
    ├── storage
    ├── tests
    └── vite.config.js
    
    30

Một ví dụ thực tế về lập lịch tác vụ trong Laravel

Bây giờ chúng ta đã đề cập đến một số yếu tố cần thiết về lập lịch tác vụ của Laravel, hãy xem xét một số ví dụ thực tế về cách nó có thể hữu ích trong một dự án thực tế. Chúng tôi sẽ tự động hóa một số tác vụ cho ứng dụng quản lý lớp học, nơi giáo viên có thể ghi lại điểm của học sinh cho từng lớp học

Bắt đầu bằng cách sao chép dự án vào máy tính của bạn bằng lệnh sau

$schedule->command["inspire"]->hourly[];
0

Tiếp theo, chuyển sang thư mục

.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
31

Đổi tên tệp

.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
32 tại thư mục gốc của dự án thành
.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
33

Sau đó, cài đặt các phụ thuộc cần thiết với

.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
34

Tạo một

.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
35 mới bằng cách chạy lệnh Artisan sau

Trước khi khởi động máy chủ phát triển, hãy đảm bảo rằng tất cả các mô-đun cần thiết đều được kích hoạt trong tệp

.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
36 của bạn

$schedule->command["inspire"]->hourly[];
1

Vị trí của php của bạn. ini có thể được tìm thấy bằng cách chạy

$schedule->command["inspire"]->hourly[];
2

Cuối cùng, khởi động máy chủ dev

$schedule->command["inspire"]->hourly[];
3

Mở trình duyệt của bạn và truy cập http. //127. 0. 0. 1. 8000. Bạn sẽ thấy trang chủ của ứng dụng quản lý lớp học. Để tiết kiệm thời gian, chúng tôi đã đưa vào một số dữ liệu giả cho dự án

Sau đó, bạn có thể tạo sinh viên mới

Hoặc cập nhật/xóa học sinh

Tự động sao lưu cơ sở dữ liệu hàng ngày

Hãy bắt đầu bằng cách lên lịch cho một tác vụ phổ biến được yêu cầu trong hầu hết các ứng dụng web sản xuất. sao lưu cơ sở dữ liệu hàng ngày. Vì cơ sở dữ liệu SQLite đang được sử dụng cho dự án này, nên việc sao lưu nó chỉ bao gồm việc sao chép tệp

.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
37 vào một vị trí đã chỉ định

Bạn có thể viết shell script để thực hiện tác vụ này như hình bên dưới

$schedule->command["inspire"]->hourly[];
4

$schedule->command["inspire"]->hourly[];
5

Khi tập lệnh này được thực thi, nó sẽ sao lưu cơ sở dữ liệu bằng cách sao chép

.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
37 vào thư mục
.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
39 dưới một tên mới có chứa ngày hiện tại. Nó cũng quét các tệp cũ hơn bảy ngày và xóa chúng để ngăn thư mục sao lưu phát triển quá lớn. Đây không phải là một bản sao lưu nhiều, nhưng nó đủ để chứng minh khái niệm tự động hóa quy trình như vậy

Hãy tiếp tục và lên lịch chạy tập lệnh này mỗi ngày một lần với đoạn mã sau

$schedule->command["inspire"]->hourly[];
6

Bạn có thể chạy lệnh

.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
40 để xem lịch chạy tiếp theo

nano app\Console\Kernel.php
0

$schedule->command["inspire"]->hourly[];
8

Nếu bạn muốn xác nhận rằng tập lệnh đang hoạt động bình thường, bạn có thể thay đổi tần suất thành từ

.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
41 thành
$schedule->command['inspire']->everyMinute[];
3 và chạy lệnh
INFO  No scheduled commands are ready to run.
4 để bộ lập lịch tiếp tục chạy mỗi phút

Sau một phút hoặc lâu hơn, bạn sẽ thấy thư mục

.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
39 được tạo cũng như các tệp sao lưu

Tạo báo cáo hàng tuần

Trường hợp sử dụng cổ điển để lập lịch tác vụ là tự động tạo báo cáo cho các số liệu kinh doanh có liên quan. Trong phần này, chúng tôi sẽ trình bày cách tự động hóa các nhiệm vụ đó bằng cách gửi báo cáo hàng tuần về hiệu suất của học sinh đến một địa chỉ email. Trong ví dụ này, báo cáo sẽ có cùng định dạng với trang chủ của ứng dụng

Trước khi tiếp tục, bạn phải định cấu hình chức năng gửi email của Laravel với Gmail SMTP [hoặc bất kỳ nhà cung cấp email nào bạn chọn]. Bắt đầu bằng cách chuyển đến Tài khoản của tôi Google -> Bảo mật  và bật Xác minh 2 bước. Sau đó, đi đến Mật khẩu ứng dụng và tạo một mật khẩu duy nhất cho ứng dụng Laravel của bạn. Trong Chọn ứng dụng, chọn tùy chọn Khác [Tên tùy chỉnh] và nhập "Ứng dụng Quản lý Lớp học" trong mục nhập văn bản

Khi mật khẩu được tạo, hãy sao chép nó vào khay nhớ tạm của bạn. Quay trở lại trình soạn thảo văn bản của bạn và mở lại tệp

.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
33 của bạn. Chỉnh sửa phần
.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
46 của tệp như hình bên dưới. Lưu ý rằng
.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
47 phải là mật khẩu duy nhất bạn vừa tạo

$schedule->command["inspire"]->hourly[];
9

Tiếp theo, đi tới tệp

 2022-10-06 21:42:39 Running ['artisan' inspire] ...................2,878ms DONE
 ⇂ '/usr/bin/php8.1' 'artisan' inspire > '/dev/null' 2>&1
6 của bạn và sửa đổi nó như hình bên dưới. Đừng quên thay thế trình giữ chỗ
.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
49 bằng địa chỉ email thực

Laravel Framework 9.33.0

. . .

about Display basic information about your application

clear-compiled Remove the compiled class file

view:cache Compile all of the application's Blade templates

view:clear Clear all compiled view files

0

Lớp

.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
50 chưa được tạo, vì vậy hãy tạo nó bằng cách dán mã bên dưới vào tệp
.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
51 mới

ứng dụng/Thư/Báo cáo hàng tuần. php

Laravel Framework 9.33.0

. . .

about Display basic information about your application

clear-compiled Remove the compiled class file

view:cache Compile all of the application's Blade templates

view:clear Clear all compiled view files

1

Khi phương thức

 2022-10-06 21:42:39 Running ['artisan' inspire] ...................2,878ms DONE
 ⇂ '/usr/bin/php8.1' 'artisan' inspire > '/dev/null' 2>&1
0 được thực thi, Laravel sẽ gửi trang
.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
53 [
.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
54] đến email bạn chọn, hiển thị mọi người trong lớp và điểm của họ cho từng môn học

Bạn có thể tạm thời thay đổi tần suất lịch trình thành thứ gì đó phù hợp hơn để thử nghiệm, chẳng hạn như

$schedule->command['inspire']->everyMinute[];
3 chẳng hạn và đợi tác vụ thực thi. Bạn sẽ nhận được email sau trong hộp thư đến của mình

Giám sát các nhiệm vụ theo lịch trình

Một cách đơn giản để xác minh rằng các tác vụ theo lịch trình của bạn đang chạy như mong đợi và cung cấp kết quả chính xác là gửi email cho chính bạn. Giả sử thông tin đăng nhập thư của bạn đã được thiết lập trong tệp

.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
33 [như đã thảo luận trước đó], phương pháp
.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
57 có thể được sử dụng để gửi đầu ra của tác vụ tới một địa chỉ email

Laravel Framework 9.33.0

. . .

about Display basic information about your application

clear-compiled Remove the compiled class file

view:cache Compile all of the application's Blade templates

view:clear Clear all compiled view files

2

Khi bạn chạy bộ lập lịch, bạn sẽ nhận được email có kết quả mỗi khi tác vụ được thực thi. Nếu bạn chỉ muốn nhận email khi có sự cố xảy ra, bạn có thể sử dụng phương thức

.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
58 để thay thế

Laravel Framework 9.33.0

. . .

about Display basic information about your application

clear-compiled Remove the compiled class file

view:cache Compile all of the application's Blade templates

view:clear Clear all compiled view files

3

Gửi email theo cách được mô tả ở trên là một cách tiếp cận phù hợp để theo dõi các nhiệm vụ đã lên lịch trong các dự án đồ chơi, đặc biệt là đối với các nhiệm vụ không quan trọng. Tuy nhiên, nó không phù hợp với các hệ thống sản xuất cần đảm bảo rằng mỗi tác vụ đều chạy theo lịch trình. Một giải pháp phù hợp hơn ở đây là sử dụng dịch vụ giám sát chuyên dụng

Thời gian hoạt động tốt hơn là một nền tảng giám sát và quản lý sự cố tuyệt vời có thể giám sát toàn bộ cơ sở hạ tầng của bạn và cảnh báo bạn một cách thích hợp nếu có sự cố xảy ra. Phần này sẽ thảo luận về cách sử dụng Thời gian hoạt động tốt hơn để theo dõi trạng thái của các tác vụ Laravel đã lên lịch của bạn

Hãy tiếp tục và tạo một tài khoản Thời gian hoạt động tốt hơn miễn phí nếu bạn chưa có tài khoản. Khi bạn đã đăng nhập, hãy đi tới phần Nhịp tim và tạo một nhịp tim mới

Chọn một tên thích hợp cho màn hình của bạn và chọn tần suất bạn muốn công việc này được lặp lại. Sau đó, trong phần Báo cáo khi có cuộc gọi, hãy chọn cách bạn muốn được thông báo khi không thực thi được công việc

Khi bạn đã hoàn tất, hãy nhấp vào Lưu thay đổi và bạn sẽ thấy trang này

URL được đánh dấu ở trên là cách Better Uptime có thể giám sát tác vụ theo lịch trình của bạn. Mỗi khi một tác vụ thực thi, bạn nên thực hiện yêu cầu HEAD, GET hoặc POST tới URL này

Quay trở lại tệp

 2022-10-06 21:42:39 Running ['artisan' inspire] ...................2,878ms DONE
 ⇂ '/usr/bin/php8.1' 'artisan' inspire > '/dev/null' 2>&1
6 của bạn và thêm móc nối
.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
60 cho nhiệm vụ đã lên lịch tương ứng như hình bên dưới

Laravel Framework 9.33.0

. . .

about Display basic information about your application

clear-compiled Remove the compiled class file

view:cache Compile all of the application's Blade templates

view:clear Clear all compiled view files

4

Phương thức

.
├── README.md
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Controller.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ ├── Models
│ └── Providers
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── php_errors.log
├── phpunit.xml
├── public
├── resources
├── routes
├── storage
├── tests
└── vite.config.js
60 gửi yêu cầu tới API Thời gian hoạt động tốt hơn sau khi tác vụ thực thi xong. Sau khi Thời gian hoạt động tốt hơn bắt đầu nhận yêu cầu, màn hình sẽ được đánh dấu là "Đang hoạt động", có nghĩa là tác vụ theo lịch trình đã sẵn sàng và đang chạy

Sau đó, bạn có thể mô phỏng một sự cố bằng cách dừng bộ lập lịch với

INFO  No scheduled commands are ready to run.
6. Nếu Better Uptime không nhận được yêu cầu trong khung thời gian bạn vừa cấu hình, màn hình sẽ được đánh dấu là "Down", có nghĩa là đã xảy ra sự cố

Bạn cũng sẽ nhận được cảnh báo trong các kênh đã định cấu hình

Lưu ý rằng bạn phải tạo nhịp tim riêng cho từng tác vụ đã lên lịch để chúng có thể được theo dõi độc lập

suy nghĩ cuối cùng

Trong hướng dẫn này, chúng ta đã nghiên cứu lập lịch tác vụ trong ứng dụng Laravel và thảo luận về nhiều tính năng thiết yếu của nó. Chúng tôi cũng trình bày cách thiết lập nó trong một ứng dụng web điển hình và cách theo dõi trạng thái của các tác vụ đã lên lịch để bạn được thông báo kịp thời nếu có sự cố xảy ra

Nếu muốn tìm hiểu sâu hơn về lập lịch tác vụ trong Laravel, bạn có thể đọc tài liệu chính thức của nó để biết thêm thông tin

Cảm ơn đã đọc và chúc bạn lên lịch vui vẻ

Chúng tôi gọi cho bạn khi bạn
trang web đi xuống

Nhận thông báo với một hoàn toàn tốt hơn
nền tảng giám sát cơ sở hạ tầng

Khám phá giám sát →

Kiểm tra thời gian hoạt động, Ping, Cổng, SSL và hơn thế nữa

Nhận thông báo sự cố Slack, SMS và điện thoại

Lập kế hoạch nhiệm vụ theo yêu cầu dễ dàng

Tạo trang trạng thái miễn phí trên tên miền của bạn

Có một gợi ý bài viết?

Tác phẩm này được cấp phép theo Creative Commons Ghi công-Phi thương mại-Chia sẻ tương tự 4. 0 Giấy phép quốc tế

Làm cách nào để chạy thử nghiệm đơn vị cụ thể trong Laravel?

Để chạy thử nghiệm, hãy thực thi lệnh kiểm tra nhà cung cấp/bin/phpunit hoặc php artisan từ thiết bị đầu cuối của bạn. .
không gian tên Kiểm tra \ Đơn vị;
sử dụng PHPUnit\Framework\TestCase;
lớp Ví dụTest mở rộng TestCase. {
* Một ví dụ thử nghiệm cơ bản
* * @return void
hàm công khai test_basic_test[]
{ $this->assertTrue[true];

Làm cách nào để chỉ chạy một bài kiểm tra trong PHPUnit?

Bạn có thể chạy tất cả các kiểm tra trong một thư mục bằng cách sử dụng tệp nhị phân PHPUnit được cài đặt trong thư mục nhà cung cấp của bạn. Bạn cũng có thể chạy thử nghiệm đơn lẻ bằng cách cung cấp đường dẫn đến tệp thử nghiệm . Bạn sử dụng cờ --verbose để biết thêm thông tin về trạng thái kiểm tra. Đầu ra cho thấy chúng tôi đã chạy 1 bài kiểm tra và thực hiện 3 xác nhận trong đó.

Thử nghiệm đơn vị là gì?

Kiểm tra đơn vị là một quy trình phát triển phần mềm trong đó các phần nhỏ nhất có thể kiểm tra được của một ứng dụng, được gọi là các đơn vị, được xem xét kỹ lưỡng và độc lập để vận hành đúng cách. This testing methodology is done during the development process by the software developers and sometimes QA staff.

Làm cách nào để chạy thử nghiệm PHPUnit?

Để chạy thử nghiệm đơn vị, nhấp vào mũi tên bên cạnh nút Chạy trên Thanh công cụ và chọn Chạy dưới dạng. Kiểm tra PHPUnit . Từ thanh Menu, chọn Run. Chạy như. Kiểm tra đơn vị PHP. Để gỡ lỗi Trường hợp kiểm tra PHPUnit, nhấp vào mũi tên bên cạnh nút gỡ lỗi trên thanh công cụ và chọn Gỡ lỗi dưới dạng. Kiểm tra đơn vị PHP.

Chủ Đề