WP2.9に上げてからwp-cronが動いてなかったので直してみた
追記 2010/01/06 WordPress2.9.1がリリースされたのでアップデートすれば以下のバグ等は解決する。
pspelp.comのWordPressを2.9にアップデートした直後、どうやらwp-cronが動作しなくなったようだ。
その影響でwp-cronを用いている毎日4時頃実施のデータベースバックアップなどが正常に動作していなかった。
wp-cronが正常に動いていないとわかったのはTable optimizerを試してみようとインストールした後だった。
wp-cron-dashboardで様子を見たが、なぜか2009/12/20、21に実行されるはずのジョブがあった。そしてTable optimizerのoptmize_tableが実行されていない。昨日のHTTPログを調べたらwp-cronが呼び出された形跡無し。
というわけで調べてみたところ、http通信モジュールでバグがあったようだ。
#11505 (cron stopped working with standard configuration) – WordPress Trac
このバグはまもなくリリースされるであろうWP2.9.1で修正されるが、とりあえずdiffファイルを見て処置をしておいた。
wp-includes/http.php の1299行目以降:
// Use _MS if available. if ( defined( 'CURLOPT_TIMEOUT_MS' ) ) { $timeout_ms = (int) ceil( 1000 * $r['timeout'] ); curl_setopt( $handle, CURLOPT_CONNECTTIMEOUT_MS, $timeout_ms ); curl_setopt( $handle, CURLOPT_TIMEOUT_MS, $timeout_ms ); } else { $timeout = (int) ceil( $r['timeout'] ); curl_setopt( $handle, CURLOPT_CONNECTTIMEOUT, $timeout ); curl_setopt( $handle, CURLOPT_TIMEOUT, $timeout ); }
上のコードがあるはずなのでそれを削除し(自分は/* */で囲みコメント化した)、
$timeout = (int) ceil( $r['timeout'] ); curl_setopt( $handle, CURLOPT_CONNECTTIMEOUT, $timeout ); curl_setopt( $handle, CURLOPT_TIMEOUT, $timeout );
とする。
これでwp-cronが動作して幸せになったとさ。