如何让Drupal的$ base_url在cron作业上工作?

时间:2010-10-22 04:56:38

标签: php drupal cron

当我运行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。

有什么建议吗?

提前致谢,

利奥

2 个答案:

答案 0 :(得分: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变量(这是完全有效的方法,而不是黑客攻击)。

答案 1 :(得分:0)

让我们走几条可能的原因:

  • 服务器上不存在wget,curl或lynx。尝试手动运行这些命令,您的操作系统会告诉您程序是否不可用。解决方案:使它们可用,安装它们,或让系统管理员提供它们或安装它们。
  • wget,curl和喜欢无法连接到外面的世界。手动调用整个cron命令,但是_确保你省略了--silent或--quit参数,你想得到详细的信息。一些防火墙阻止从内到外连接的机会很大。许多安全可靠的系统都可以。解决方法:联系您的系统管理员以禁用防火墙。
  • 没有人可以连接或运行你的cron.php。你已经指出,情况并非如此,但是为了将来的参考:许多服务器阻止cron.php由“任何人”运行。你可以通过调用cron.php并查看看门狗(Drupal»Admin»Logs»Recent Events)来找到它。应该有一个告诉cron运行的记录。解决方案:了解cron.php是如何被“仅限任何人”阻止的,通常这是.htaccess或apache配置中的记录,通常是防火墙。禁用您请求的IP或客户端。