2009-08-06 56 views
2

有沒有辦法允許hook_cron以管理員權限運行 - 例如像sudo hook_cron()那樣?在Drupal 6中以管理員權限運行hook_cron

這個問題是一個跟進my earlier question試圖診斷爲什麼hook_cron()函數由/drupal/cron.php運行調用不同的是,相同功能的/admin/reports/status/run-cron調用。

我的特殊功能(稱爲foo_cron())更新用戶配置文件,作爲其夜間職責的一部分。但是,/drupal/cron.php顯然是作爲匿名用戶運行的。匿名用戶不能修改此站點中的用戶配置文件字段,原因很明顯,所以腳本的這部分失敗。

我知道我可以通過直接使用SQL修改profile_fields來解決這個問題,但這感覺像一個醜陋的黑客,並且如果我在多個模塊中開始這樣做可能很難維護。

在現有的Drupal函數和框架中,是否可以通過我們通常只給管理員提供的priv來運行某些foo_cron()作業,比如更新配置文件?

這個特定的網站運行Drupal 6.1.3。

回答

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" 
+0

完美...謝謝! – anschauung 2010-06-29 11:35:55

+0

此解決方案存在一個小問題,在最後一行中,連字符中有一個額外的空格。請更改它,因爲它很難在cpanel環境中進行調試。 – Andrei 2010-11-22 13:29:45

+0

要在cPanel中使用此功能,您可能還需要在shell腳本路徑之前添加「/ bin/sh」。 – Andrei 2010-11-22 13:30:33

1

您只需保存全局$ user變量,然後將$ user全局更改爲具有該權限的用戶,然後再次更改該用戶。

現在我不會推薦這個,但會建議你使用SQL,因爲這種方法很hacky,可能有點不安全,用管理權限運行cron作業。

+0

你能解釋爲何使用全局$用戶比使用SQL hackier一點?我對此事的看法是,SQL很黑,因爲它不在Drupal中完成Drupal任務,但我很好奇是什麼讓你瞭解了這一點。 – anschauung 2009-08-06 22:10:11

+1

它是Drupal核心的核心,它設置全局變量的值(在我相信的引導期間)。因此,臨時改變一個值(影響Drupal的所有功能)的價值比自己編寫一點SQL本身的功能會更糟糕。 – googletorp 2009-08-07 03:38:28