2010-10-22 5 views
5

Wie bekomme ich $ base_url, um die korrekte URL für meine Drupal-Seite anzuzeigen, wenn ich einen Cron-Job ausführe? Muss ich die globale $ base_url manuell setzen, damit das geschieht? Muss ich den Cron-Job als registrierter Benutzer ausführen?

Wenn ich mysite.com/cron.php manuell ausfühle, scheint alles gut zu funktionieren: $ base_url ist auf die richtige URL eingestellt. Wenn ich jedoch einen ähnlichen Befehl über cron oder drush ausführe, wird $ base_url auf einen generischen "http: // default" gesetzt.

Die lustige Sache ist, dass, wenn ich cron manuell als ein registrierter Benutzer von innen Drupal (using devel, zum Beispiel), $ base_url aways zeigt auf die richtige URL.

Irgendwelche Vorschläge?

Vielen Dank im Voraus,

Leo

Antwort

0

wir Trog mehrere mögliche Ursachen gehen sollte:

  • wget, curl oder Luchs existieren nicht auf dem Server. Versuchen Sie, diese Befehle manuell auszuführen, Ihr Betriebssystem wird Ihnen sagen, ob die Programme nicht verfügbar sind. Lösung: Machen Sie sie verfügbar, installieren Sie sie oder bitten Sie Ihren Systemadministrator, sie verfügbar zu machen oder zu installieren.
  • Wget, Curl und dergleichen können nicht mit der Außenwelt verbinden. Rufen Sie den gesamten Cron-Befehl von Hand auf, aber stellen Sie sicher, dass Sie die Parameter --silent oder --quit auslassen, um ausführliche Informationen zu erhalten. Gute Chance einige Firewall blockiert Ihre Verbindung von innen nach außen. Viele gut gesicherte Systeme tun es. Soldution: Wenden Sie sich an Ihren Systemadministrator, um die Firewall zu deaktivieren.
  • Niemand kann Ihre cron.php verbinden oder ausführen. Sie weisen bereits darauf hin, dass dies nicht der Fall ist, aber für zukünftige Referenz: viele Server haben cron.php blockiert, um von "nur irgendjemandem" ausgeführt zu werden. Sie können dies herausfinden, indem Sie cron.php aufrufen und in den Watchdog schauen (Drupal »Admin» Protokolle »Letzte Ereignisse). Eine Aufzeichnung, die besagt, dass Cron ausgeführt wurde, sollte dort vorhanden sein. Lösung: Finden Sie heraus, wie die cron.php von "nur irgendjemandem" blockiert wird, oft ist dies eine Aufzeichnung in .htaccess oder Apache Konfiguration, oft ist es eine Firewall. Deaktivieren Sie das für die angeforderte IP oder den Client.
+0

Hallo Berkes, danke für deine Nachricht! Leider glaube ich nicht, dass meine Frage präzise war. Cron läuft gut. Aber es initialisiert $ base_ulr nicht. Hättest du irgendwelche Vorschläge? –

+0

Sie sagen, dass, wenn Sie cron von Hand feuern, $ base_url richtig eingestellt ist, aber wenn Sie es durch den Server (Kommandozeile) feuern, ist es nicht? – berkes

6

Ihr Cron ist wahrscheinlich falsch eingerichtet.

Sie können wget oder curl verwenden, was im Grunde dasselbe ist wie das Ausführen des Cron "von Hand". Etwas wie folgt aus:

5 * * * * wget http://example.com/cron.php 

Sie sind wahrscheinlich drupal.sh verwenden, die, dass Sie sollten verwenden behauptet „http:. Als URI //default/cron.php“ Dies wird die Behandlung von $ base_url durchbrechen. Die folgenden könnten arbeiten mit drupal.sh.

5 * * * * /path/to/drupal.sh --root /home/site/public_html/ http://example.com/cron.php 

Wenn drush verwenden, könnte man das --uri Argument zu liefern haben:

drush --uri=http://example.com cron 

Sie auch nur die $ base_url Variable in settings.php einstellen könnte (was eine absolut gültige Art und Weise ist mach es, kein Hack).

Verwandte Themen