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

Leo*_*urd 5 php cron drupal

当我运行一个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.

有什么建议?

提前致谢,

狮子座

Nic*_*kiy 6

你的cron可能设置错了.

你可以使用wget或curl,这实际上与"手动"运行cron相同.像这样的东西:

5 * * * * wget http://example.com/cron.php
Run Code Online (Sandbox Code Playgroud)

您可能正在使用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
Run Code Online (Sandbox Code Playgroud)

使用drush时,您可能必须提供--uri参数:

drush --uri=http://example.com cron
Run Code Online (Sandbox Code Playgroud)

你也可以在settings.php中设置$ base_url变量(这是完全有效的方法,而不是黑客).


ber*_*kes 0

让我们来分析几个可能的原因:

\n\n
    \n
  • 服务器上不存在 wget、curl 或 lynx。尝试手动运行这些命令,您的操作系统会告诉您这些程序是否不可用。解决方案:使它们可用、安装它们,或者要求您的系统管理员使它们可用或安装它们。
  • \n
  • wget、curl之类的无法连接到外界。手动调用整个 cron 命令,但请确保省略 --silent 或 --quit 参数,因为您想要获取详细信息。很有可能某些防火墙阻止了您从内部到外部的连接。许多安全性良好的系统都是如此。解决方案:联系您的系统管理员禁用防火墙。
  • \n
  • 没有人可以连接或运行您的 cron.php。您已经指出,情况并非如此,但供将来参考:许多服务器已阻止 cron.php 由“任何人”运行。您可以通过调用 cron.php 并查看看门狗(Drupal \xc2\xbb Admin \xc2\xbb Logs \xc2\xbb 最近事件)来找到这一点。那里应该有一条记录表明 cron 已运行。解决方案:找出 cron.php 是如何被“任何人”阻止的,通常这是 .htaccess 或 apache 配置中的记录,通常是防火墙。为您请求的 IP 或客户端禁用该功能。
  • \n
\n