Drupal 6: Tolle Fehlermeldungen
Symptome:
* Der Drupal-Cron läuft nicht durch.
* Im DB-Log steht, dass Cron das Zeitlimit überschritten habe und darum abgebrochen worden sei.
* Direkt davor steht eine "Access Denied"-Meldung für den Pfad node/14, was auf diesem System die öffentlich zugängliche(!) Startseite ist.
Ich: WTF?
Hinweise:
* Die Meldung mit dem Zeitlimit ist offensichtlich falsch und irreführend, da cron diese Meldung schon nach wenigen Sekunden bringt, auch wenn max_execution_time mit php_admin_value auf 1500 Sekunden festgenagelt ist.
* Wird der Drupal-Cron eingeloggt als Admin-Nutzer angeworfen, läuft er durch.
Lösung:
* Ein bestimmtes Modul im System, das die Zugriffskontrolle für einen bestimmten Inhaltstyp implementiert, tut das in hook_nodeapi, $op == 'view' (offensichtlich die falsche Stelle dafür, das ist der Bug).
* Anonyme Nutzer dürfen Knoten dieses Typs nicht ansehen.
* Der Indexaufbau für die Suche, der von cron erledigt wird, fordert aber den gerenderten Knoten an.
* Läuft Cron als anonymer Nutzer so steigt der Code mit drupal_access_denied aus.
* Offenbar wird cron.php beim Loggen des Zugriffsfehlers als Startseite gewertet (vermutlich ist q nicht gesetzt). Deshalb das node/14 in der Fehlermeldung.
* Steigt cron wie in diesem Fall mit einem exit() aus, so wird dennoch die von Drupal registrierte Shutdown-Funktion aufgerufen. Die aber loggt stur einen Zeitüberschreitungsfehler, egal was tatsächlich passiert ist. Aua.