2010-10-22 66 views
5

如何在運行cron作業時獲取$ base_url以顯示Drupal站點的正確url?我是否必須手動設置全局$ base_url才能發生?我是否必須以註冊用戶身份運行cron作業?

當我手工運行mysite.com/cron.php時,一切似乎都正常:$ base_url設置爲正確的url。但是,當我通過cron或drush運行類似的命令時,$ base_url被設置爲通用的「http:// default」。

有趣的是,當我從Drupal內部手動運行cron作爲註冊用戶時(例如使用devel),$ base_url指向正確的url。

有什麼建議嗎?

由於提前,

利奧

回答

0

我們應該走線槽幾個可能的原因:

  • wget的,捲曲或猞猁不存在於服務器上。嘗試手動運行這些命令,您的操作系統會告訴您程序是否不可用。解決方案:使它們可用,安裝它們,或要求您的系統管理員使其可用或安裝它們。
  • wget,捲曲和喜歡不能連接到外部世界。手工調用整個cron命令,但是_make確保省略--silent或--quit參數,您想獲得詳細信息。良好的機會防火牆阻止您從內部到外部的連接。許多安全系統都可以。解決方法:聯繫您的系統管理員以禁用防火牆。
  • 沒有人可以連接或運行您的cron.php。您已經指出,情況並非如此,但爲了將來的參考:許多服務器已經阻止cron.php被「只有任何人」運行。你可以通過調用cron.php並查看看門狗(Drupal»Admin»Logs»Recent Events)來找到它。告訴cron運行的記錄應該在那裏。解決方案:找出cron.php是如何阻止「任何人」的,通常這是.htaccess或apache配置中的記錄,通常是防火牆。禁用您的請求的IP或客戶端。
+0

你好berkes,謝謝你的留言!不幸的是,我不認爲我的問題是確切的。克龍運行良好。但它不會初始化$ base_ulr。你有什麼建議嗎? – 2010-10-22 17:55:41

+0

你是說如果你手動啓動cron,$ base_url設置正確,但是如果你通過服務器(命令行)啓動它,它不是? – berkes 2010-10-25 08:00:14

6

您的cron可能設置錯誤。

您可以使用wget或curl,這與「手動」運行cron實際上是一樣的。事情是這樣的:

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

您可能正在使用drupal.sh,聲稱,你應該使用「http://default/cron.php爲URI」這將打破$ base_url處理。以下可能與drupal.sh一起使用。

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

使用drush,你可能必須提供--uri說法:

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

你也可以只設置在settings.php配置的$ BASE_URL變量(這是一個完全有效的方法這樣做,而不是黑客)。