読者です 読者をやめる 読者になる 読者になる

AbyssLukeのガイドライン(Maybe archived)

はてダから移転。多分更新しないかもしれない。

WP2.9に上げてからwp-cronが動いてなかったので直してみた

追記 2010/01/06 WordPress2.9.1がリリースされたのでアップデートすれば以下のバグ等は解決する。

pspelp.comWordPressを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が動作して幸せになったとさ。