Nhiệm vụ tự động: Cron
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 máy tính giống như Linux / UNIX. Công việc Cron đượ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ẽ liên tục chạy tại một thời điểm đã đặt. Cron là một trong những công cụ hữu ích nhất trong Linux hoặc UNIX như hệ điều hành. Dịch vụ Cron [Daemon] chạy trong nền và liên tục kiểm tra tệp/etc/crontab, /etc/cron./* Các thư mục. Nó cũng kiểm tra thư mục/var/spool/cron/.
Cấu hình các nhiệm vụ Cron
Trong ví dụ sau, lệnh crontab được hiển thị bên dưới sẽ tự động kích hoạt các tác vụ cron cứ sau mười phút:
*/10 * * * * /usr/bin/php /opt/test.php
Trong mẫu trên, */10 * * * * * đại diện cho khi nhiệm vụ sẽ xảy ra. Hình đầu tiên đại diện cho vài phút - trong trường hợp này, trên mỗi "mười" phút. Các số liệu khác đại diện, tương ứng, giờ, ngày, tháng và ngày trong tuần.
Shift+:
7 là một ký tự đại diện, có nghĩa là "mọi lúc".Bắt đầu với việc tìm hiểu nhị phân PHP của bạn bằng cách nhập dòng lệnh:
whereis php
Đầu ra phải là một cái gì đó như:
PHP:/usr/bin/php /etc/php.ini /etc/php.d/usr/lib64/php/usr/inclay/php/usr/share/php /usr/share/man/man1/php.1 .gz
Chỉ định chính xác đường dẫn đầy đủ trong lệnh của bạn.
Nhập lệnh sau để nhập Cronjob:
crontab -e
Để xem những gì bạn có ở Crontab.
Chỉnh sửa 1:
Để thoát khỏi trình chỉnh sửa VIM mà không cần lưu chỉ cần nhấp vào:
Shift+:
Và sau đó nhập
Shift+:
8 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 như Linux / UNIX. Công việc Cron đượ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ẽ liên tục chạy tại một thời điểm đã đặt. Cron là một trong những công cụ hữu ích nhất trong Linux hoặc UNIX như hệ điều hành. Dịch vụ Cron [Daemon] chạy trong nền và liên tục kiểm tra tệp/etc/crontab, /etc/cron./* Các thư mục. Nó cũng kiểm tra thư mục/var/spool/cron/.
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 PHP
Định cấu hình nhiệm vụ ngô
# cd /var/www/web # vim test.php
Tìm thư viện PHP
Định cấu hình nhiệm vụ ngô
Tìm thư viện PHP
*/5 * * * * /usr/bin/php /opt/test.php
Cronjob nhập cảnh
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 như Linux / UNIX. Công việc Cron đượ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ẽ liên tục chạy tại một thời điểm đã đặt. Cron là một trong những công cụ hữu ích nhất trong Linux hoặc UNIX như hệ điều hành. Dịch vụ Cron [Daemon] chạy trong nền và liên tục kiểm tra tệp/etc/crontab, /etc/cron./* Các thư mục. Nó cũng kiểm tra thư mục/var/spool/cron/.
Tìm thư viện PHP
Cronjob nhập cảnh
# whereis php
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 như Linux / UNIX. Công việc Cron đượ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ẽ liên tục chạy tại một thời điểm đã đặt. Cron là một trong những công cụ hữu ích nhất trong Linux hoặc UNIX như hệ điều hành. Dịch vụ Cron [Daemon] chạy trong nền và liên tục kiểm tra tệp/etc/crontab, /etc/cron./* Các thư mục. Nó cũng kiểm tra thư mục/var/spool/cron/.
php: /usr/bin/php /etc/php.ini /etc/php.d /usr/lib64/php /usr/include/php /usr/share/php /usr/share/man/man1/php.1.gz
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.
Cronjob nhập cảnh
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 như Linux / UNIX. Công việc Cron đượ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ẽ liên tục chạy tại một thời điểm đã đặt. Cron là một trong những công cụ hữu ích nhất trong Linux hoặc UNIX như hệ điều hành. Dịch vụ Cron [Daemon] chạy trong nền và liên tục kiểm tra tệp/etc/crontab, /etc/cron./* Các thư mục. Nó cũng kiểm tra thư mục/var/spool/cron/.
# crontab -e */5 * * * * /usr/bin/php /opt/test.php
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.
Trước hết tạo ra một tập lệnh PHP như dưới đây.
Lưu và đóng tệp.www.looklinux.com. To become an author at LookLinux Submit Article. Stay connected to Facebook.
Trong ví dụ sau, lệnh crontab được hiển thị bên dưới sẽ tự động kích hoạt các tác vụ cron cứ sau năm phút:
Trong mẫu trên, */5 * * * * * đại diện cho khi nhiệm vụ sẽ xảy ra. Con số đầu tiên đại diện cho vài phút - trong trường hợp này, trên mỗi phút năm phút. Các số liệu khác đại diện, tương ứng, giờ, ngày, tháng và ngày trong tuần.
* là một ký tự đại diện, có nghĩa là mỗi lần.
Tác giả đã chọn các cô gái viết mã để nhận quyên góp như một phần của chương trình Write for quyên góp.
Giới thiệu
Trong Linux, bạn có thể sử dụng công cụ Crontab đa năng để xử lý các nhiệm vụ chạy dài trong nền vào những thời điểm cụ thể. Mặc dù Daemon là tuyệt vời để chạy các tác vụ lặp đi lặp lại, nhưng nó có một giới hạn: bạn chỉ có thể thực hiện các tác vụ trong khoảng thời gian tối thiểu là 1 phút.
Tuy nhiên, trong nhiều ứng dụng, để tránh trải nghiệm người dùng kém, nó tốt hơn cho các công việc thực hiện thường xuyên hơn. Chẳng hạn, nếu bạn sử dụng mô hình Queue công việc để lên lịch các tác vụ xử lý tệp trên trang web của bạn, thì sự chờ đợi đáng kể sẽ có tác động tiêu cực đến người dùng cuối.
Một kịch bản khác là một ứng dụng sử dụng mô hình công việc-queue để gửi tin nhắn văn bản hoặc email cho khách hàng sau khi họ đã hoàn thành một nhiệm vụ nhất định trong một ứng dụng [ví dụ: gửi tiền cho người nhận]. Nếu người dùng phải đợi một phút trước khi gửi tin nhắn xác nhận, họ có thể nghĩ rằng giao dịch không thành công và cố gắng lặp lại cùng một giao dịch.
Để khắc phục những thách thức này, bạn có thể lập trình một tập lệnh PHP lặp lại và xử lý các nhiệm vụ lặp đi lặp lại trong 60 giây vì nó đang chờ trình nền Crontab gọi lại sau phút. Khi tập lệnh PHP được gọi lần đầu tiên bởi crontab, nó có thể thực hiện các tác vụ trong một khoảng thời gian phù hợp với logic của ứng dụng của bạn mà không giữ cho người dùng chờ đợi.
Trong hướng dẫn này, bạn sẽ tạo cơ sở dữ liệu
Shift+:
9 mẫu trên máy chủ Ubuntu 20.04. Sau đó, bạn sẽ thiết lập một bảng # cd /var/www/web # vim test.php0 và tập lệnh thực hiện các công việc trong bảng của bạn trong khoảng 5 giây bằng cách sử dụng các hàm php
# cd /var/www/web # vim test.php1 và các hàm
# cd /var/www/web # vim test.php2.
Điều kiện tiên quyết
Để hoàn thành hướng dẫn này, bạn yêu cầu như sau:
Máy chủ Ubuntu 20.04 được thiết lập với người dùng không root. Thực hiện theo thiết lập máy chủ ban đầu của chúng tôi với hướng dẫn Ubuntu 20.04.
Một ngăn xếp đèn được thiết lập trên máy chủ của bạn. Tham khảo cách cài đặt ngăn xếp Linux, Apache, MySQL, PHP [LAMP] trên hướng dẫn Ubuntu 20.04. Đối với hướng dẫn này, bạn có thể bỏ qua Bước 4 - tạo một máy chủ ảo cho trang web của bạn.Step 4 — Creating a Virtual Host for your Website.
Bước 1 - Thiết lập cơ sở dữ liệu
Trong bước này, bạn sẽ tạo một cơ sở dữ liệu mẫu và bảng. Đầu tiên,
# cd /var/www/web # vim test.php3 vào máy chủ của bạn và đăng nhập vào MySQL dưới dạng root:
- sudo mysql -u root -p
Nhập mật khẩu gốc của bạn cho máy chủ MySQL và nhấn
# cd /var/www/web # vim test.php4 để tiếp tục. Sau đó, chạy lệnh sau để tạo cơ sở dữ liệu
Shift+:
9.whereis php
0Tạo người dùng không root cho cơ sở dữ liệu. Bạn sẽ cần thông tin đăng nhập của người dùng này để kết nối với cơ sở dữ liệu
Shift+:
9 từ PHP. Hãy nhớ thay thế # cd /var/www/web # vim test.php7 bằng giá trị mạnh:
whereis php
1Tiếp theo, chuyển sang cơ sở dữ liệu
Shift+:
9:whereis php
2whereis php
3Khi bạn đã chọn cơ sở dữ liệu, hãy tạo bảng
# cd /var/www/web # vim test.php0. Trong bảng này, bạn sẽ chèn một số nhiệm vụ sẽ được tự động thực hiện bởi một công việc cron. Vì khoảng thời gian tối thiểu để chạy một công việc cron là
*/5 * * * * /usr/bin/php /opt/test.php0 phút, sau đó bạn sẽ mã một tập lệnh PHP ghi đè cài đặt này và thay vào đó, thực hiện các công việc trong khoảng thời gian 5 giây.
Hiện tại, hãy tạo bảng
# cd /var/www/web # vim test.php0 của bạn:
whereis php
4Chèn ba hồ sơ vào bảng nhiệm vụ. Sử dụng hàm MySQL
*/5 * * * * /usr/bin/php /opt/test.php2 trong cột
*/5 * * * * /usr/bin/php /opt/test.php3 để ghi lại ngày và giờ hiện tại khi các tác vụ được xếp hàng. Ngoài ra, đối với cột
*/5 * * * * /usr/bin/php /opt/test.php4, sử dụng hàm MySQL
*/5 * * * * /usr/bin/php /opt/test.php5 để đặt thời gian mặc định là
*/5 * * * * /usr/bin/php /opt/test.php6. Sau đó, khi các tác vụ hoàn tất, tập lệnh của bạn sẽ cập nhật cột này:
whereis php
5Xác nhận đầu ra sau khi chạy mỗi lệnh
*/5 * * * * /usr/bin/php /opt/test.php7:
whereis php
6Đảm bảo dữ liệu được đặt đúng vị trí bằng cách chạy câu lệnh
*/5 * * * * /usr/bin/php /opt/test.php8 so với bảng
# cd /var/www/web # vim test.php0:
whereis php
7Bạn sẽ tìm thấy một danh sách tất cả các nhiệm vụ:
whereis php
8Thời gian cho cột
*/5 * * * * /usr/bin/php /opt/test.php4 được đặt thành
*/5 * * * * /usr/bin/php /opt/test.php6, cột này sẽ cập nhật sau khi các tác vụ được xử lý bởi tập lệnh PHP mà bạn sẽ tạo tiếp theo.
Thoát khỏi giao diện dòng lệnh MySQL:
whereis php
9crontab -e
0Cơ sở dữ liệu
Shift+:
9 của bạn và bảng # cd /var/www/web # vim test.php0 hiện đã được đặt đúng chỗ và giờ đây bạn có thể tạo tập lệnh PHP xử lý các công việc.
Bước 2 - Tạo tập lệnh PHP chạy các tác vụ sau 5 giây
Trong bước này, bạn sẽ tạo một tập lệnh sử dụng kết hợp các chức năng của php
# cd /var/www/web # vim test.php1 và
# whereis php5 để chạy các tác vụ sau mỗi 5 giây.
Mở tệp
# whereis php6 mới trong thư mục gốc của máy chủ web của bạn bằng Nano:
crontab -e
1Tiếp theo, hãy tạo khối
# whereis php7 mới sau thẻ
# whereis php8 và khai báo các biến cơ sở dữ liệu mà bạn đã tạo ở bước 1. Hãy nhớ thay thế
# cd /var/www/web # vim test.php7 bằng mật khẩu thực tế cho người dùng cơ sở dữ liệu của bạn:
/var/www/html/tasks.php
crontab -e
2Tiếp theo, khai báo một lớp PDO [Php dữ liệu Php] mới và đặt thuộc tính
php: /usr/bin/php /etc/php.ini /etc/php.d /usr/lib64/php /usr/include/php /usr/share/php /usr/share/man/man1/php.1.gz0 để bắt bất kỳ lỗi PDO nào. Ngoài ra, chuyển
php: /usr/bin/php /etc/php.ini /etc/php.d /usr/lib64/php /usr/include/php /usr/share/php /usr/share/man/man1/php.1.gz1 sang
php: /usr/bin/php /etc/php.ini /etc/php.d /usr/lib64/php /usr/include/php /usr/share/php /usr/share/man/man1/php.1.gz2 để cho phép động cơ cơ sở dữ liệu MySQL bản địa xử lý mô phỏng. Các câu lệnh được chuẩn bị cho phép bạn gửi các truy vấn và dữ liệu SQL một cách riêng biệt để tăng cường bảo mật và giảm cơ hội tấn công tiêm SQL:
/var/www/html/tasks.php
crontab -e
3Sau đó, tạo một biến mới có tên
php: /usr/bin/php /etc/php.ini /etc/php.d /usr/lib64/php /usr/include/php /usr/share/php /usr/share/man/man1/php.1.gz3 và đặt nó thành thời gian hiện tại cộng với 60 giây. Sau đó mở một câu lệnh PHP
php: /usr/bin/php /etc/php.ini /etc/php.d /usr/lib64/php /usr/include/php /usr/share/php /usr/share/man/man1/php.1.gz4 mới. Ý tưởng ở đây là tạo một vòng lặp chạy cho đến thời điểm hiện tại [
php: /usr/bin/php /etc/php.ini /etc/php.d /usr/lib64/php /usr/include/php /usr/share/php /usr/share/man/man1/php.1.gz5] phù hợp với biến
php: /usr/bin/php /etc/php.ini /etc/php.d /usr/lib64/php /usr/include/php /usr/share/php /usr/share/man/man1/php.1.gz3:
crontab -e
4Tiếp theo, khai báo một tuyên bố SQL đã chuẩn bị lấy lại các công việc chưa được xử lý từ bảng
# cd /var/www/web # vim test.php0:
crontab -e
5Thực hiện lệnh SQL và tìm nạp tất cả các hàng từ bảng
# cd /var/www/web # vim test.php0 có cột
php: /usr/bin/php /etc/php.ini /etc/php.d /usr/lib64/php /usr/include/php /usr/share/php /usr/share/man/man1/php.1.gz9 được đặt thành
# crontab -e */5 * * * * /usr/bin/php /opt/test.php0. Điều này có nghĩa là các hàng không được xử lý:
crontab -e
6Tiếp theo, lặp qua các hàng được truy xuất bằng cách sử dụng câu lệnh PHP
# crontab -e */5 * * * * /usr/bin/php /opt/test.php1 và tạo một câu lệnh SQL khác. Lần này, lệnh SQL cập nhật các cột
php: /usr/bin/php /etc/php.ini /etc/php.d /usr/lib64/php /usr/include/php /usr/share/php /usr/share/man/man1/php.1.gz9 và
*/5 * * * * /usr/bin/php /opt/test.php4 cho mỗi tác vụ được xử lý. Điều này đảm bảo rằng bạn không có nhiệm vụ xử lý nhiều hơn một lần:
crontab -e
7Lưu ý: Nếu bạn có một hàng đợi lớn sẽ được xử lý [ví dụ: 100.000 bản ghi mỗi giây], bạn có thể xem xét việc xếp hàng trong một máy chủ Redis vì nó nhanh hơn MySQL khi thực hiện mô hình công việc. Tuy nhiên, hướng dẫn này sẽ xử lý một bộ dữ liệu nhỏ hơn. If you have a large queue to be processed [for example, 100,000 records per second], you might consider queueing jobs in a Redis Server since it is faster than MySQL when it comes to implementing the job-queue model. Nevertheless, this guide will process a smaller dataset.
Trước khi bạn đóng câu lệnh Php
# crontab -e */5 * * * * /usr/bin/php /opt/test.php4 đầu tiên, hãy bao gồm câu lệnh
# crontab -e */5 * * * * /usr/bin/php /opt/test.php5 để tạm dừng việc thực hiện công việc trong 5 giây và giải phóng tài nguyên máy chủ của bạn.
Bạn có thể thay đổi khoảng thời gian 5 giây tùy thuộc vào logic kinh doanh của bạn và tốc độ bạn muốn các nhiệm vụ thực hiện. Chẳng hạn, nếu bạn muốn các nhiệm vụ được xử lý 3 lần trong một phút, hãy đặt giá trị này thành 20 giây.
Hãy nhớ
# crontab -e */5 * * * * /usr/bin/php /opt/test.php6 bất kỳ thông báo lỗi PDO nào bên trong khối
# crontab -e */5 * * * * /usr/bin/php /opt/test.php7:
crontab -e
8Tệp
# crontab -e */5 * * * * /usr/bin/php /opt/test.php8 hoàn chỉnh của bạn sẽ như sau:
/var/www/html/tasks.php
crontab -e
9Lưu tệp bằng cách nhấn
# crontab -e */5 * * * * /usr/bin/php /opt/test.php9 +
- sudo mysql -u root -p
0, - sudo mysql -u root -p
1 sau đó # cd /var/www/web # vim test.php4.
Khi bạn đã hoàn thành mã hóa logic trong tệp
# whereis php6, bạn sẽ lên lịch trình nền crontab để thực thi tệp sau mỗi 1 phút trong bước tiếp theo.
Bước 3 - Lên lịch tập lệnh PHP để chạy sau 1 phút
Trong Linux, bạn có thể lên lịch các công việc để chạy tự động sau thời gian quy định bằng cách nhập lệnh vào tệp crontab. Trong bước này, bạn sẽ hướng dẫn Daemon Crontab chạy tập lệnh
# whereis php6 của bạn sau mỗi phút. Vì vậy, hãy mở tệp
- sudo mysql -u root -p
5 bằng Nano:Shift+:
0Sau đó thêm phần sau vào cuối tệp để thực hiện
- sudo mysql -u root -p
6 sau mỗi */5 * * * * /usr/bin/php /opt/test.php0 phút:
/etc/crontab
Shift+:
1Lưu và đóng tập tin.
Hướng dẫn này giả định rằng bạn có kiến thức cơ bản về cách làm việc của cron. Cân nhắc đọc hướng dẫn của chúng tôi về cách sử dụng Cron để tự động hóa các tác vụ trên Ubuntu.
Như đã chỉ ra trước đó, mặc dù trình nền cron chạy tệp
# crontab -e */5 * * * * /usr/bin/php /opt/test.php8 sau mỗi 1 phút, một khi tệp được thực thi lần đầu tiên, nó sẽ lặp qua các tác vụ mở trong 60 giây nữa. Vào thời điểm thời gian vòng lặp hết hạn, Cron Daemon sẽ thực thi lại tệp và quá trình sẽ tiếp tục.
Sau khi cập nhật và đóng tệp
- sudo mysql -u root -p
5, trình nền crontab sẽ bắt đầu thực thi các tác vụ MYSQL mà bạn đã chèn vào bảng # cd /var/www/web # vim test.php0 ngay lập tức. Để xác nhận xem mọi thứ có hoạt động như mong đợi hay không, bạn sẽ truy vấn cơ sở dữ liệu
Shift+:
9 của mình tiếp theo.Bước 4 - Xác nhận thực thi công việc
Trong bước này, bạn sẽ mở cơ sở dữ liệu của mình thêm một lần nữa để kiểm tra xem tệp
# crontab -e */5 * * * * /usr/bin/php /opt/test.php8 có xử lý các công việc được xếp hàng khi được thực hiện tự động bởi crontab hay không.
Đăng nhập lại vào máy chủ MySQL của bạn dưới dạng Root:
- sudo mysql -u root -p
Sau đó, nhập mật khẩu gốc MySQL Server của bạn và nhấn
# cd /var/www/web # vim test.php4 để tiếp tục. Sau đó, chuyển sang cơ sở dữ liệu:
whereis php
2whereis php
3Chạy câu lệnh
*/5 * * * * /usr/bin/php /opt/test.php8 đối với bảng
whereis php
05:Shift+:
5Bạn sẽ nhận được đầu ra tương tự như sau. Trong cột
*/5 * * * * /usr/bin/php /opt/test.php4, các tác vụ đã được xử lý trong khoảng thời gian
whereis php
07 giây. Ngoài ra, các nhiệm vụ đã được đánh dấu là hoàn thành kể từ cột php: /usr/bin/php /etc/php.ini /etc/php.d /usr/lib64/php /usr/include/php /usr/share/php /usr/share/man/man1/php.1.gz9 hiện được đặt thành
- sudo mysql -u root -p
1, có nghĩa là whereis php
10.Shift+:
6Điều này xác nhận rằng tập lệnh PHP của bạn đang hoạt động như mong đợi; Bạn đã chạy các tác vụ trong một khoảng thời gian ngắn hơn bằng cách ghi đè lên giới hạn của khoảng thời gian 1 phút do crontab daemon đặt ra.
Sự kết luận
Trong hướng dẫn này, bạn đã thiết lập một cơ sở dữ liệu mẫu trên máy chủ Ubuntu 20.04. Sau đó, bạn đã tạo các công việc trong một bảng và chạy chúng trong khoảng 5 giây bằng cách sử dụng các hàm php
# cd /var/www/web # vim test.php1 và các hàm
# cd /var/www/web # vim test.php2. Sử dụng logic trong hướng dẫn này khi bạn tiếp theo triển khai ứng dụng dựa trên công việc trong đó các tác vụ cần được chạy nhiều lần trong khoảng thời gian 1 phút.
Để biết thêm hướng dẫn PHP, hãy xem trang chủ đề PHP của chúng tôi.