2

有没有办法允许hook_cron以管理员权限运行——例如某种方式sudo hook_cron()

这个问题是我之前的问题的后续,试图诊断为什么 hook_cron() 调用的/drupal/cron.php函数与/admin/reports/status/run-cron.

我的特定功能(称为它foo_cron())更新用户配置文件作为其夜间职责的一部分。但是,/drupal/cron.php显然以匿名用户身份运行。由于显而易见的原因,匿名用户无法修改此站点中的用户配置文件字段,因此这部分脚本失败。

我知道我可以通过直接使用 SQL 进行修改来解决这个问题profile_fields,但这感觉就像一个丑陋的 hack,如果我开始在多个模块中这样做,可能很难维护。

在现有的 Drupal 功能和框架中,是否有一种方法可以使某些 foo_cron() 作业使用我们通常只提供给管理员的权限运行,例如更新配置文件?

这个特定站点正在运行 Drupal 6.1.3。

4

2 回答 2

2

来自drupal cron 手册页:以经过身份验证的用户身份运行 cron

#!/bin/sh
# Reference http://drupal.org/node/479948#comment-1673488 by pearlbear

SITE=https://dev.example.com/
USERNAME=user.name
PASS=ChangeMe!!12

COOKIES=/tmp/cron-cookies.txt
WGETPARAMS="--quiet -O /dev/null --no-check-certificate --save-cookies $COOKIES --keep-session-cookies --load-cookies $COOKIES"
# if you run drupal in a default language different than English you need to modify this
LOGIN="Log%20in"

wget $WGETPARAMS "${SITE}user"
wget $WGETPARAMS --post-data="name=$USERNAME&pass=$PASS&op=$LOGIN&form_id=user_login" "${SITE}user"
wget $WGETPARAMS " ${SITE}cron.php"
于 2010-06-28T17:08:28.587 回答
1

您需要做的就是保存全局 $user 变量,然后将全局 $user 更改为具有该权限的用户,然后再次更改用户。

现在我不建议这样做,但建议您改用 SQL,因为这种方法非常hacky,并且使用管理员权限运行 cron 作业可能有点不安全。

于 2009-08-06T21:40:30.567 回答