【问题标题】:How to get Drupal's $base_url to work on a cron job?如何让 Drupal 的 $base_url 用于 cron 工作?
【发布时间】:2010-10-22 04:56:38
【问题描述】:

当我运行 cron 作业时,如何让 $base_url 为我的 Drupal 站点显示正确的 url?我是否必须手动设置全局 $base_url 才能发生这种情况?我必须以注册用户的身份运行 cron 作业吗?

当我手动运行 mysite.com/cron.php 时,一切似乎都正常:$base_url 设置为正确的 url。但是,当我通过 cron 或 drush 运行类似命令时,$base_url 被设置为通用的“http://default”。

有趣的是,当我从 Drupal 内部(例如使用 devel)以注册用户身份手动运行 cron 时,$base_url aways 指向正确的 url。

有什么建议吗?

提前致谢,

狮子座

【问题讨论】:

    标签: php drupal cron


    【解决方案1】:

    您的 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 变量(这是一种完全有效的方法,而不是 hack)。

    【讨论】:

      【解决方案2】:

      我们应该了解几个可能的原因:

      • 服务器上不存在 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 或客户端禁用它。

      【讨论】:

      • 伯克斯您好,感谢您的留言!不幸的是,我认为我的问题并不准确。 Cron 运行良好。但它没有初始化 $base_ulr。你有什么建议吗?
      • 您是说如果您手动启动 cron,$base_url 设置正确,但如果您通过服务器(命令行)启动它,则不是?
      猜你喜欢
      • 2019-05-06
      • 2013-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多