it-swarm-vi.com

Công việc định kỳ trong Drupal 7

Tôi có một tệp PHP thực hiện một số nhiệm vụ theo các khoảng nhất quán.

Tôi đã đặt tệp PHP trong thư mục mô-đun tùy chỉnh, nhưng tôi thấy rằng Drupal các hàm như drupal_set_message() không có sẵn trong = PHP.

Làm cách nào để tôi bao gồm Drupal hàm bên trong tệp này PHP? Làm cách nào để thiết lập tệp php này được chạy dưới dạng công việc định kỳ?

4
ayush

Bạn cần triển khai hook_cron () trong mô-đun của mình và thực hiện các tác vụ này tại đó.

Sau đó, drupal sẽ tự động thực thi các tác vụ này trong quá trình xử lý cron mặc định.

Có thể bạn đã sử dụng drupal_set_message() chỉ làm ví dụ nhưng lưu ý rằng việc sử dụng hàm đó trong triển khai hook_cron () không có ý nghĩa gì vì không có người dùng để đọc các tin nhắn này. Thay vào đó, bạn có thể đăng nhập tin nhắn bằng watchdog () .

12
Berdir

Những gì được báo cáo bởi Berdir là chính xác; việc triển khai hook_cron() được gọi trong các công việc Cron, nếu bạn đã đặt đúng nhiệm vụ cron. Điều này có nghĩa là bạn cần thêm một công việc định kỳ thực thi một trong các lệnh sau:

/usr/bin/lynx -source http://example.com/cron.php > /dev/null 2>&1
curl --silent --compressed http://example.com/cron.php

Theo tôi nhớ, bạn cũng cần sử dụng khóa cron được báo cáo trong Drupal trang quản trị.

Nếu, vì bất kỳ lý do nào (tôi nghi ngờ có bất kỳ lý do nào để bạn làm như vậy), bạn chỉ cần thực thi tập lệnh đó PHP, và không phải tất cả Drupal Các tác vụ cron, có nghĩa là bạn thực sự đã đặt hai công việc cron và một công việc đã thực hiện Drupal các nhiệm vụ cron, sau đó bạn nên thêm các dòng sau vào đầu PHP tệp bạn đang cố thực hiện tác vụ cron:

define('DRUPAL_ROOT', 'Set here the directory where Drupal is installed');
require_once DRUPAL_ROOT . '/includes/bootstrap.inc';

Làm như vậy, tệp PHP sẽ có quyền truy cập vào tất cả các hàm có sẵn trong bootstrap.inc . Nếu bạn cần một hàm có sẵn trong một Drupal bao gồm tệp, sau đó bạn cần bao gồm tệp đó với require_once(); nếu bạn cần một hàm có sẵn từ mô-đun Drupal, thì bạn cần phải thêm drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL) sau các dòng require_once().
[.___.] Nếu bạn cần một chức năng từ một mô-đun, thì bạn thực sự nên triển khai một mô-đun tùy chỉnh (nếu bạn chưa có) thực hiện hook_cron() và bao gồm PHP bạn phải thực thi nó.

Như Berdir đã báo cáo, a Drupal cron task không nên gọi drupal_set_message() vì khi tác vụ cron được thực thi, những thông báo đó sẽ không hiển thị. Nếu bạn cần báo cáo thông báo lỗi mà người dùng quản trị viên có thể thấy, sau đó mã cần gọi watchdog () , cần Drupal để được khởi động đầy đủ; hàm được định nghĩa trong bootstrap.inc.

3
kiamlaluno