在Drupal 6中运行具有管理员权限的hook_cron

时间:2009-08-06 14:07:52

标签: drupal drupal-6

有没有办法允许hook_cron以管理员权限运行 - 例如sudo hook_cron()那种?{/ p>

这个问题是my earlier question尝试诊断为什么/drupal/cron.php调用的hook_cron()函数与/admin/reports/status/run-cron调用的相同函数运行不同的后续问题。

我的特殊功能(称之为foo_cron())更新用户个人资料,作为其夜间职责的一部分。但是,/drupal/cron.php显然是以匿名用户身份运行的。

,匿名用户无法修改此站点中的用户配置文件字段,原因显而易见

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

在现有的Drupal函数和框架中,是否可以使用我们通常只向管理员提供的priv来运行某些foo_cron()作业,例如更新配置文件?

此特定网站正在运行Drupal 6.1.3。

2 个答案:

答案 0 :(得分:2)

来自drupal cron manual page: 将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"

答案 1 :(得分:1)

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

现在我不建议这样做,但是建议您使用SQL,因为这种方法非常hacky,并且可能有点不安全,无法使用admin privs运行cron作业。