CUSTOM_runSheduledTask()にご注意
- 2006年6月12日(月) 07:45 JST
- 投稿者: mystral-kk
- 表示回数 4,423

// Check and see if any plugins (or custom functions)
// have scheduled tasks to perform
if(( DB_getItem( $_TABLES['vars'], 'value', "name='last_scheduled_run'" )
+ $_CONF['cron_schedule_interval'] )
最初にテーブル(gl_vars)に書き込まれている last_scheduled_run という値をチェックし,それから所定の時間が経っていたら,PLG_runScheduledTask() を呼び出し, last_scheduled_run を更新するという動作なので,間違えようもない。
ところが last_scheduled_run がインストール時にテーブルに設定されるのは 1.4.0 を新規インストールしたときだけなので,それ以前のバージョンからアップしたサイトでは,この if 文が常に成り立ってしまい,lib-common.php が呼び出される度に CUSTOM_runSheduledTask() が実行されるという恐ろしい結果になってしまった。本家の掲示板で訊いてみると,Dirkさんから「それ,バグやねん。CUSTOM_runSheduledTask()は 1.4.1 で名前が変わるから,気ぃつけといてや」というレスが返ってきた。解決策は簡単で,CUSTOM_runSheduledTask()を使用する前に, last_scheduled_run にゼロをセットしておけば,すぐに正しい値で上書きされ,以降は config.php の $_CONF['cron_schedule_interval'] で指定した時間間隔で実行されるようになる。