Cron_key for Drupal 7

I nästan alla webbapplikationer som är utvecklade i Drupal är det viktigt att Drupals egna cron kör med jämna intervall. Det är för att dra igång olika händelser i applikationen som t.ex. schemalagda publiceringar, upprensning m.m.

I tidigare versioner av Drupal är det ganska enkelt att då och då köra Drupal-cron med hjälp av crontab på ett vanligt system och t.ex. kommandot wget.

En typiskt crontab-fil för t.ex. Drupal 5 och Drupal 6 kan se ut så här:

0 * * * * wget -O - -q -t 1 http://localhost/cron.php

Det betyder att Drupals egna cron körs en gång per timme. Om man vill köra cron, säg vart 20:e minut, och sidan är skyddad med namn och lösenord (htpasswd) så kan man även passa på att ange namn och lösenord för wget:

*/20 * * * * wget -O - -q -t 1 http://user:pwd@localhost/cron.php

Försöker man göra samma sak med Drupal 7 får man däremot problem:

root@vps-nnnnn:~# wget -O - http://localhost/cron.php
Resolving localhost... ::1, 127.0.0.1
Connecting to localhost|127.0.0.1|:80... connected.
HTTP request sent, awaiting response... 403 Forbidden
2011-06-13 16:20:43 ERROR 403: Forbidden.

Anledningen är att i Drupal 7 finns det numera något som heter cron_key. Det är en nyckel som genereras när man installerar Drupal 7. Den URL som ska användas kan antingen ses i administrationsgränssnittet under Administration -> Reports -> Status page, eller läsas ut med drush:

root@vps-nnnnn:~# alias drushr='/usr/bin/php /usr/local/drush/drush.php -r /mnt/persist/www/docroot'
root@vps-nnnnn:~# drushr variable-get cron_key
cron_key: "RFjK9F9JTJjKjTRFa...sd345gvdaeiM5EAaDaSE"

Crontab-filen ska med andra ord se ut t.ex. så här:

0 * * * * wget -O - -q -t 1 http://localhost/cron.php?cron_key=RFjK9F9JTJjKjTRFa...sd345gvdaeiM5EAaDaSE

Nytt i Drupal 7 är även att s.k. fattigmans-cron (Poor Man’s Cron) som standard är installerat. Det betyder att om inte cron fungerar så kan det ta ett tag innan man märker det eftersom Poor Man’s Cron ser till att Drupal-cron körs då och då beroende på hur många besökare man har. Det rekommenderas att köra cron via wget och inte Poor Man’s Cron eftersom prestanda på sidan kan försämras avsevärt.

Mer information kan du läsa här.