it-swarm-id.com

Pekerjaan Cron di Drupal 7

Saya memiliki file PHP yang melakukan beberapa tugas dalam interval yang konsisten.

Saya telah menempatkan bahwa PHP file di dalam folder modul kustom, tetapi saya menemukan bahwa Drupal fungsi seperti drupal_set_message() tidak tersedia di dalam = PHP file.

Bagaimana cara saya memasukkan Drupal di dalam file PHP ini? Bagaimana saya mengatur file php ini untuk dijalankan sebagai cron job?

4
ayush

Anda perlu mengimplementasikan hook_cron () di modul Anda dan menjalankan tugas-tugas ini di sana.

Kemudian, drupal akan secara otomatis menjalankan tugas-tugas ini selama penanganan cron default.

Anda mungkin menggunakan drupal_set_message() hanya sebagai contoh tetapi perhatikan bahwa menggunakan fungsi itu dalam implementasi hook_cron () tidak masuk akal karena tidak ada pengguna untuk membaca pesan-pesan ini. Sebagai alternatif, Anda dapat mencatat pesan dengan watchdog () .

12
Berdir

Apa yang dilaporkan oleh Berdir benar; implementasi hook_cron() dipanggil selama pekerjaan Cron, jika Anda telah mengatur tugas cron dengan benar. Ini berarti bahwa Anda perlu menambahkan tugas cron yang mengeksekusi salah satu dari perintah berikut:

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

Sejauh yang saya ingat, Anda juga perlu menggunakan kunci cron yang dilaporkan dalam Drupal halaman administrasi.

Jika, untuk alasan apa pun (saya ragu ada alasan bagi Anda untuk melakukannya), Anda hanya perlu mengeksekusi skrip PHP, dan tidak semua Drupal tugas cron, yang berarti bahwa Anda telah benar-benar menetapkan dua pekerjaan cron dan satu sudah menjalankan tugas cron Drupal, maka Anda harus menambahkan baris berikut di awal PHP file yang Anda coba jalankan tugas cron:

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

Melakukannya, file PHP akan memiliki akses ke semua fungsi yang tersedia di bootstrap.inc . Jika Anda memerlukan fungsi yang tersedia di Drupal sertakan file, maka Anda harus memasukkan file itu dengan require_once(); jika Anda memerlukan fungsi yang tersedia dari modul Drupal modul, maka Anda harus tambahkan drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL) setelah garis require_once().
Jika Anda memerlukan fungsi dari modul, maka Anda harus benar-benar mengimplementasikan modul khusus (jika Anda belum memilikinya) yang mengimplementasikan hook_cron() dan itu termasuk PHP Anda harus menjalankannya.

Seperti dilaporkan oleh Berdir, tugas cron Drupal tidak boleh memanggil drupal_set_message() karena ketika tugas cron dijalankan, pesan-pesan itu tidak akan terlihat. Jika Anda perlu melaporkan pesan kesalahan yang dapat dilihat oleh pengguna administrator, maka kode perlu memanggil watchdog () , yang membutuhkan Drupal untuk menjadi bootstrap penuh; fungsi ini didefinisikan dalam bootstrap.inc.

3
kiamlaluno