Drupal 的 cron

Cron,Discuz! 翻譯為計劃任務,為一個需要定時執行的模組。當 cron 執行時,它會做很多東西(視乎使用者安裝的模組及設定),例如為頁面索引、檢查主程式及模組的更新等等。如果 cron 未能夠執行的話,Drupal 就無法知道主程式及模組的更新資訊,亦無法即時為 Drupal 更新。這個教學會分享一些有關進階使用 cron 的方法。

原理

Drupal 的 cron 與 phpBB 及 Discuz! 的不同。Drupal 的 cron 並不會像 phpBB 及 Discuz! 搬在使用者瀏覽頁面時計算時間再執行,它需要站長另外設定程式或安裝模組定時瀏覽 cron.php 才能夠執行。

定時執行方法

Drupal 提供了一些定時執行的方法,不過,不是個個人都能夠使用這些方法。下方是一些讓無法變更伺服器設定的站長執行 cron 的方法。

Poorman's Cron

根據 Drupal 所提供的方法,Drupal 指需要在伺服器使用 Lynx 等純文字瀏覽器定時瀏覽 cron.php 定時執行 cron。由於不是個個人都有伺服器,或是網存允許這樣設定,所以有很多替代品衍生了。其中一個就是 Poorman's Cron。這個模組的原理與 phpBB 及 Discuz! 執行 cron 的原理相同,允許沒有伺服器/網頁寄存不允許的 Drupal 用家執行 cron

CronJob.de

CronJob.de 是一個免費的 cron 服務網站,它可以讓你設定網址,並且設定時間。它的服務會在你設定的時間瀏覽哪些網址,這正正配合到 Drupal 的 cron。由於介面是德文,請自行使用翻譯軟件(如 Google 翻譯)翻譯整頁的德文。

安全

Cron 是一個會使用十分多伺服器資源的程式,而 Drupal 的 cron 是暴露於網絡,只要在瀏覽器輸入 cron.php 便能執行,故你可能需要在 cron.php 加上一些安全性的判斷式來判斷這個是否合法的使用者。

只要在執行 cron 前上方加上判斷式即可。

範例
if($_GET['df8j1vc5ds79k3p'] != '9f45780a98bbcd879c6ec1e2d3194b10') {
exit;
}

這樣,只有使用 cron.php?df8j1vc5ds79k3p=9f45780a98bbcd879c6ec1e2d3194b10 才能夠執行 cron。當然,df8j1vc5ds79k3p9f45780a98bbcd879c6ec1e2d3194b10 均能夠被變更。只要將這句加上 cron.phpinclude_once './includes/bootstrap.inc'; 上方即可。不過,所有 CronJob.de 所設定的網址均需要加入後方的變數,否則一樣無法執行。