如何让 Drupal 的 $base_url 执行 cron 作业?

发布于 2024-09-28 06:20:45 字数 362 浏览 4 评论 0原文

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

有什么建议吗?

预先感谢,

利奥

How to get $base_url to show the correct url for my Drupal site when I'm running a cron job? Do I have to set the global $base_url manually for that to happen? Do I have to run the cron job as a registered user?

When I run mysite.com/cron.php by hand everything seems to work fine: $base_url is set to the correct url. However, when I run a similar command via cron or drush, $base_url is set to a generic "http://default".

The funny thing is that when I run cron manually as a registered user from inside Drupal (using devel, for instance), $base_url aways points to the right url.

Any suggestions?

Thanks in advance,

Leo

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

醉生梦死 2024-10-05 06:20:45

您的 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)。

Your cron is probably set up wrong.

You can use wget or curl, which is effectively the same as running the cron "by hand". Something like this:

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

You are probably using drupal.sh, which claims that you should use "http://default/cron.php as the URI." This will break the $base_url handling. The following might work with drupal.sh.

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

When using drush, you might have to supply the --uri argument:

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

You could also just set the $base_url variable in settings.php (which is a perfectly valid way to do it, not a hack).

清醇 2024-10-05 06:20:45

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

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

Let's should walk trough several possible causes:

  • wget, curl or lynx don't exist on the server. Try running these commands by hand, your OS will tell you if the programs are not available. Solution: make them available, install them, or ask your sysadmin to make them available or install them.
  • wget, curl and the likes cannot connect to the outside world. Call the entire cron command by hand, but _make sure you leave out the --silent or --quit parameters, you want to get verbose information. Good chance some firewall is blocking your connection from inside to outside. Many well-secured systems do. Soldution: Contact your sysadmin to disable the firewall.
  • No-one can connect or run your cron.php. You already point out, that is not the case, but for future reference: many servers have blocked cron.php to be run by "just anyone". You can find this out by calling cron.php and looking into the watchdog (Drupal » Admin » Logs » Recent Events). A record telling that cron was run should be present there. Solution: Find out how the cron.php is blocked from "just anyone", often this is a record in .htaccess or apache configuration, often it is a firewall. Disable that for your requested IP or client.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文