Crontab chạy tệp php mỗi phút
Cron là một dịch vụ lập lịch dựa trên thời gian trong các hệ điều hành giống Linux/Unix. Cron job được sử dụng để lên lịch các lệnh được thực thi định kỳ. Bạn có thể thiết lập các lệnh hoặc tập lệnh sẽ chạy liên tục vào một thời điểm đã đặt. Cron là một trong những công cụ hữu ích nhất trong hệ điều hành Linux hoặc UNIX. Dịch vụ cron (daemon) chạy ẩn và liên tục kiểm tra tệp /etc/crontab, /etc/cron. /* thư mục. Nó cũng kiểm tra thư mục /var/spool/cron/ Show
Trong bài viết này tôi sẽ chỉ cho bạn cách thực thi tập lệnh PHP trong công việc cron Tạo tập lệnh PHPTrước hết hãy tạo một tập lệnh php như bên dưới # cd /var/www/web # vim test.php Lưu và đóng tệp Định cấu hình tác vụ ngôTrong ví dụ sau, lệnh crontab hiển thị bên dưới sẽ tự động kích hoạt các tác vụ cron sau mỗi năm phút */5 * * * * /usr/bin/php /opt/test.php Trong ví dụ trên, */5 * * * * đại diện cho thời điểm tác vụ sẽ xảy ra. Con số đầu tiên biểu thị số phút – trong trường hợp này, cứ sau “năm” phút. Các số liệu khác lần lượt biểu thị giờ, ngày, tháng và ngày trong tuần Đây là một bộ lập lịch công việc định kỳ theo khuôn khổ có thể dễ dàng tích hợp với dự án của bạn hoặc chạy dưới dạng một bộ lập lịch lệnh độc lập. Ý tưởng ban đầu được lấy cảm hứng từ Laravel Task Scheduling Cài đặt qua ComposerCách khuyến nghị là cài đặt php-cron-scheduler thông qua Composer. Vui lòng tham khảo Bắt đầu về cách tải xuống và cài đặt Composer Sau khi bạn đã tải xuống/cài đặt Composer, hãy chạy $scheduler->php('path/to/my/script.php');8 hoặc thêm gói hàng vào $scheduler->php('path/to/my/script.php');9 của bạn { "require": { "peppeocchi/php-cron-scheduler": "4.*" } } Scheduler V4 requires php >= 7.3, please use the v3 branch for php versions < 7.3 and > 7.1 or the v2 branch for php versions < 7.1. Làm thế nào nó hoạt độngTạo một tệp $scheduler->php( 'path/to/my/script.php', // The script to execute 'path/to/my/custom/bin/php', // The PHP bin [ '-c' => 'ignore', '--merge' => null, ], 'myCustomIdentifier' );0 trong thư mục gốc của dự án của bạn với nội dung sau require_once __DIR__.'/vendor/autoload.php';
use GO\Scheduler;
// Create a new scheduler
$scheduler = new Scheduler();
// .. configure the scheduled jobs (see below) ...
// Let the scheduler execute jobs which are due.
$scheduler->run(); Sau đó, thêm một mục mới vào crontab của bạn để chạy $scheduler->php( 'path/to/my/script.php', // The script to execute 'path/to/my/custom/bin/php', // The PHP bin [ '-c' => 'ignore', '--merge' => null, ], 'myCustomIdentifier' );0 mỗi phút ________số 8 Đó là nó. Bộ lập lịch của bạn đã hoạt động, bây giờ bạn có thể thêm công việc của mình mà không cần lo lắng về crontab nữa lập kế hoạch công việcTheo mặc định, tất cả các công việc của bạn sẽ cố gắng chạy ở chế độ nền. Các tập lệnh PHP và các lệnh thô sẽ chạy ở chế độ nền theo mặc định, trong khi các chức năng sẽ luôn chạy ở chế độ nền trước. Bạn có thể buộc một lệnh chạy ở nền trước bằng cách gọi phương thức $scheduler->php( 'path/to/my/script.php', // The script to execute 'path/to/my/custom/bin/php', // The PHP bin [ '-c' => 'ignore', '--merge' => null, ], 'myCustomIdentifier' );2. Các công việc phải gửi đầu ra tới email, sẽ chạy ở nền trước Lên lịch một tập lệnh php$scheduler->php('path/to/my/script.php'); Phương thức $scheduler->php( 'path/to/my/script.php', // The script to execute 'path/to/my/custom/bin/php', // The PHP bin [ '-c' => 'ignore', '--merge' => null, ], 'myCustomIdentifier' );3 chấp nhận 4 đối số
$scheduler->php( 'path/to/my/script.php', // The script to execute 'path/to/my/custom/bin/php', // The PHP bin [ '-c' => 'ignore', '--merge' => null, ], 'myCustomIdentifier' ); Lên lịch một lệnh thô*/5 * * * * /usr/bin/php /opt/test.php3 Phương thức $scheduler->php( 'path/to/my/script.php', // The script to execute 'path/to/my/custom/bin/php', // The PHP bin [ '-c' => 'ignore', '--merge' => null, ], 'myCustomIdentifier' );4 chấp nhận 3 đối số
*/5 * * * * /usr/bin/php /opt/test.php5 Lên lịch một chức năng*/5 * * * * /usr/bin/php /opt/test.php6 Phương thức $scheduler->php( 'path/to/my/script.php', // The script to execute 'path/to/my/custom/bin/php', // The PHP bin [ '-c' => 'ignore', '--merge' => null, ], 'myCustomIdentifier' );5 chấp nhận 3 đối số
*/5 * * * * /usr/bin/php /opt/test.php8 Tất cả các đối số bạn truyền vào mảng sẽ được đưa vào hàm của bạn. Ví dụ */5 * * * * /usr/bin/php /opt/test.php9 Nếu bạn muốn truyền một cặp khóa => giá trị, vui lòng truyền một mảng trong mảng đối số require_once __DIR__.'/vendor/autoload.php';
use GO\Scheduler;
// Create a new scheduler
$scheduler = new Scheduler();
// .. configure the scheduled jobs (see below) ...
// Let the scheduler execute jobs which are due.
$scheduler->run(); 0Lên lịch thời gian thực hiệnCó một số phương pháp giúp bạn đặt thời gian thực hiện lịch trình của mình. Nếu bạn không gọi bất kỳ phương thức nào trong số này, công việc sẽ chạy mỗi phút (* * * * *)
Có những người trợ giúp bổ sung cho các ngày trong tuần (tất cả đều chấp nhận tùy chọn giờ và phút - mặc định là 00. 00)
require_once __DIR__.'/vendor/autoload.php';
use GO\Scheduler;
// Create a new scheduler
$scheduler = new Scheduler();
// .. configure the scheduled jobs (see below) ...
// Let the scheduler execute jobs which are due.
$scheduler->run(); 5Và những người trợ giúp bổ sung trong nhiều tháng (tất cả đều chấp nhận các tùy chọn ngày, giờ và phút - được mặc định là ngày đầu tiên của tháng lúc 00. 00)
require_once __DIR__.'/vendor/autoload.php';
use GO\Scheduler;
// Create a new scheduler
$scheduler = new Scheduler();
// .. configure the scheduled jobs (see below) ...
// Let the scheduler execute jobs which are due.
$scheduler->run(); 6Bạn cũng có thể chỉ định một */5 * * * * /usr/bin/php /opt/test.php65 khi công việc sẽ chạy. Ngày có thể được chỉ định dưới dạng chuỗi hoặc dưới dạng ví dụ của */5 * * * * /usr/bin/php /opt/test.php66. Trong cả hai trường hợp, bạn chỉ có thể chỉ định ngày (e. g. 2018-01-01) hay thời gian cũng vậy (e. g. 2018-01-01 10. 30), nếu bạn không chỉ định thời gian nó sẽ chạy ở 00. 00 vào ngày đó. Nếu bạn đang cung cấp một ngày ở định dạng "không chuẩn", bạn nên chuyển một ví dụ về ________ 166. Nếu bạn đang sử dụng */5 * * * * /usr/bin/php /opt/test.php68 mà không chỉ định thời gian và bạn muốn đặt mặc định là 00. 00, chỉ cần đảm bảo thêm */5 * * * * /usr/bin/php /opt/test.php69 vào định dạng ngày, nếu không thì thời gian sẽ là thời gian hiện tại. Đọc thêm require_once __DIR__.'/vendor/autoload.php';
use GO\Scheduler;
// Create a new scheduler
$scheduler = new Scheduler();
// .. configure the scheduled jobs (see below) ...
// Let the scheduler execute jobs which are due.
$scheduler->run(); 7Gửi đầu ra tới tập tin/sBạn có thể xác định một hoặc nhiều tệp mà bạn muốn đầu ra của quá trình thực thi tập lệnh/lệnh/chức năng của mình được gửi tới require_once __DIR__.'/vendor/autoload.php';
use GO\Scheduler;
// Create a new scheduler
$scheduler = new Scheduler();
// .. configure the scheduled jobs (see below) ...
// Let the scheduler execute jobs which are due.
$scheduler->run(); 8Gửi đầu ra tới email/sBạn có thể xác định một hoặc nhiều địa chỉ email mà bạn muốn đầu ra của quá trình thực thi tập lệnh/lệnh/chức năng của mình được gửi tới. Để gửi email, đầu ra của công việc trước tiên cần được gửi tới một tệp. Trên thực tế, các tệp sẽ được đính kèm vào địa chỉ email của bạn. Để làm việc này, bạn cần cài đặt swiftmailer/swiftmailer require_once __DIR__.'/vendor/autoload.php';
use GO\Scheduler;
// Create a new scheduler
$scheduler = new Scheduler();
// .. configure the scheduled jobs (see below) ...
// Let the scheduler execute jobs which are due.
$scheduler->run(); 9Bạn có thể tùy ý tùy chỉnh phiên bản */5 * * * * /usr/bin/php /opt/test.php80 bằng một */5 * * * * /usr/bin/php /opt/test.php81 tùy chỉnh. Bạn có thể cấu hình
Cấu hình có thể được đặt "toàn cầu" cho tất cả các lệnh của bộ lập lịch, khi tạo bộ lập lịch 0Hoặc có thể được thiết lập trên một công việc trên cơ sở công việc 1Lên lịch thực hiện có điều kiệnĐôi khi bạn có thể muốn thực hiện một lịch trình không chỉ khi đến hạn thực hiện mà còn phụ thuộc vào một số điều kiện khác Bạn có thể ủy thác việc thực hiện một cronjob để kiểm tra trung thực bằng phương pháp */5 * * * * /usr/bin/php /opt/test.php89 2Lên lịch thứ tự thực hiệnCác công việc sắp chạy đang được sắp xếp theo thứ tự thực hiện của chúng. các công việc có thể chạy trong nền sẽ được thực thi trước Lịch trình chồng chéoĐể ngăn chặn việc thực hiện một lịch trình trong khi quá trình thực hiện trước đó vẫn đang diễn ra, hãy sử dụng phương pháp */5 * * * * /usr/bin/php /opt/test.php90. Để tránh chồng chéo, Bộ lập lịch cần tạo các tệp khóa. Theo mặc định, nó sẽ được sử dụng đường dẫn thư mục được sử dụng cho các tệp tạm thời Bạn có thể chỉ định đường dẫn thư mục tùy chỉnh trên toàn cầu khi tạo phiên bản Trình lập lịch biểu mới 3Hoặc bạn có thể xác định đường dẫn thư mục trên cơ sở từng công việc 4Trong một số trường hợp, bạn cũng có thể muốn chạy công việc nếu nó chồng chéo. Ví dụ: nếu lần thực hiện cuối cùng cách đây hơn 5 phút. Bạn có thể truyền một hàm dưới dạng tham số thứ hai, thời gian thực hiện cuối cùng sẽ được đưa vào. Công việc sẽ không chạy cho đến khi hàm này trả về */5 * * * * /usr/bin/php /opt/test.php91. Nếu nó trả về */5 * * * * /usr/bin/php /opt/test.php88, công việc sẽ chạy nếu trùng lặp 5Trước khi thực hiện công việcTrong một số trường hợp, bạn có thể muốn chạy một số mã, nếu công việc phải chạy, trước khi nó được thực thi. Ví dụ: bạn có thể muốn thêm một mục nhật ký, ping một url hoặc bất kỳ thứ gì khác. Để làm như vậy, bạn có thể gọi */5 * * * * /usr/bin/php /opt/test.php93 như ví dụ bên dưới 6Sau khi thực hiện công việcĐôi khi bạn có thể muốn làm một cái gì đó sau khi một công việc chạy. Các phương pháp */5 * * * * /usr/bin/php /opt/test.php94 cung cấp cho bạn sự linh hoạt để làm bất cứ điều gì bạn muốn sau khi thực hiện công việc. Đầu ra của công việc sẽ được đưa vào chức năng này. Ví dụ: bạn có thể muốn thêm một mục vào nhật ký của mình, ping một url, v.v. Theo mặc định, công việc sẽ buộc phải chạy ở nền trước (vì đầu ra được đưa vào hàm), nếu bạn không cần đầu ra, bạn có thể chuyển */5 * * * * /usr/bin/php /opt/test.php88 làm tham số thứ hai để cho phép thực thi ở chế độ nền (trong trường hợp này 7Sử dụng "before" và "then" cùng nhau 8Nhiều lịch trình chạyTrong một số trường hợp, bạn có thể cần chạy bộ lập lịch nhiều lần trong cùng một tập lệnh. Mặc dù đây không phải là trường hợp phổ biến, nhưng các phương pháp sau đây sẽ cho phép bạn sử dụng lại cùng một phiên bản của trình lập lịch biểu 9Một phương pháp hữu ích khác nếu bạn đang sử dụng lại cùng một phiên bản của trình lập lịch trình với các công việc khác nhau (e. g. công việc đến từ một nguồn bên ngoài - db, tệp. ) trong mỗi lần chạy, là để xóa các công việc đã lên lịch hiện tại $scheduler->php('path/to/my/script.php');0 Làm giả thời gian chạy bộ lập lịchKhi chạy bộ lập lịch, bạn có thể vượt qua một */5 * * * * /usr/bin/php /opt/test.php66 để giả mạo thời gian chạy bộ lập lịch. Lý do cho tính năng này được mô tả ở đây; $scheduler->php('path/to/my/script.php');1 thất bại trong công việcNếu một số công việc không thành công, bạn có thể truy cập danh sách các công việc không thành công và lý do thất bại $scheduler->php('path/to/my/script.php');2 Người làm việcBạn có thể mô phỏng một cronjob bằng cách bắt đầu một công nhân. Hãy xem một ví dụ đơn giản $scheduler->php('path/to/my/script.php');3 Đoạn mã trên bắt đầu một công nhân sẽ chạy công việc của bạn mỗi phút. Đây có nghĩa là một công cụ kiểm tra/gỡ lỗi, nhưng bạn có thể tự do sử dụng nó theo bất kỳ cách nào bạn muốn. Bạn có thể tùy ý chuyển một mảng "giây" khi bạn muốn nhân viên chạy công việc của bạn, ví dụ bằng cách chuyển */5 * * * * /usr/bin/php /opt/test.php98, nhân viên sẽ chạy công việc của bạn ở giây 0 và giây 30 của phút $scheduler->php('path/to/my/script.php');4 Bạn nên chạy worker riêng biệt với bộ lập lịch của mình, mặc dù bạn có thể chạy worker trong bộ lập lịch của mình. Sự cố xảy ra khi bộ lập lịch của bạn có một hoặc nhiều công việc đồng bộ và nhân viên sẽ phải đợi công việc của bạn hoàn thành trước khi tiếp tục vòng lặp. Ví dụ $scheduler->php('path/to/my/script.php');5 Ở trên sẽ bỏ qua nhiều lần thực hiện, vì vậy nó sẽ không chạy nữa mỗi phút nhưng nó sẽ chạy cứ sau 2 hoặc 3 phút. Thay vào đó, cách tiếp cận ưa thích sẽ là tách nhân viên khỏi bộ lập lịch của bạn $scheduler->php('path/to/my/script.php');6 $scheduler->php('path/to/my/script.php');7 Sau đó, trong dòng lệnh của bạn chạy */5 * * * * /usr/bin/php /opt/test.php99. Điều này sẽ bắt đầu một quá trình tiền cảnh mà bạn có thể giết bằng cách thoát khỏi lệnh Công nhân không có nghĩa là thu thập bất kỳ dữ liệu nào về các lần chạy của bạn và như đã nói, nó có nghĩa là một công cụ kiểm tra/gỡ lỗi |