2

hook_cron管理者権限で実行できるようにする方法はありますか?たとえば、ある種のsudo hook_cron()ようになりますか?

この質問は、によって呼び出されたhook_cron()関数が、によって呼び出された同じ関数とは異なる方法で実行される理由を診断しようとする私の以前の質問のフォローアップです。/drupal/cron.php/admin/reports/status/run-cron

私の特定の機能(これを呼び出すfoo_cron())は、夜間の業務の一部としてユーザープロファイルを更新します。しかし、/drupal/cron.phpどうやら匿名ユーザーとして実行されます。匿名ユーザーは、明らかな理由により、このサイトのユーザープロファイルフィールドを変更できないため、スクリプトのこの部分は失敗します。

SQLを使用して直接変更することでこれを回避できることはわかっていprofile_fieldsますが、これは醜いハックのように感じられ、複数のモジュールでこれを開始すると維持するのが難しい場合があります。

既存のDrupal関数とフレームワーク内で、プロファイルの更新など、通常は管理者にのみ提供するprivで特定のfoo_cron()ジョブを実行する方法はありますか?

この特定のサイトはDrupal6.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グローバルをその権限を持つユーザーに変更してから、ユーザーを再度変更することです。

これはお勧めしませんが、このアプローチは非常にハッキーであり、管理者権限でcronジョブを実行するには少し安全でない可能性があるため、代わりにSQLを使用することをお勧めします。

于 2009-08-06T21:40:30.567 に答える