代码之家  ›  专栏  ›  技术社区  ›  anschauung

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

  •  2
  • anschauung  · 技术社区  · 16 年前

    有办法允许吗 hook_cron 以管理员权限运行--例如 sudo hook_cron() 事实上?

    这个问题是对 my earlier question 尝试诊断hook_cron()函数被调用的原因 /drupal/cron.php 以不同的方式运行 /admin/reports/status/run-cron .

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

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

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

    这个特定的站点运行Drupal6.1.3。

    2 回复  |  直到 13 年前
        1
  •  2
  •   mirzu    16 年前

    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"
    
        2
  •  1
  •   googletorp    16 年前

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

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