どうも、はにおかさいです。
トラブル内容
先日、WordPress 3.4.1のサイトを別のサーバーに移す作業をしていました。
サイトの移行だけしてドメインのAレコードは新サーバーに向けずにhosts書き換えで動作確認をしていたとき、新サーバーのBackWPupが動作しないことに気づきました。ヘルスチェックを見ると、
予約したイベント backwpup_cron の実行に失敗しました。
とか
「バックグランド更新が想定通りに動作していません」
と言われました。
自動バックアップが機能しないのはまずいと思ったので、原因を考えました。
旧サーバーでは動いていたので、なにか新サーバーでまずいことが起きてるなぁと...
原因
WordPressのサイトが読み込まれたとき、curlでhttpリクエストによってwp-cron.phpを実行していました。
つまり、WordPressは自分にアクセスできないとwp-cron.phpを呼んでWP Cronを動作させられないのです。
作業中はhostsでドメインにIPアドレスを宛がっていて、DNS上では古いサーバーを指していました。
$cron_request = apply_filters(
'cron_request',
array(
'url' => add_query_arg( 'doing_wp_cron', $doing_wp_cron, site_url( 'wp-cron.php' ) ),
'key' => $doing_wp_cron,
'args' => array(
'timeout' => 0.01,
'blocking' => false,
/** This filter is documented in wp-includes/class-wp-http-streams.php */
'sslverify' => apply_filters( 'https_local_ssl_verify', false ),
),
),
$doing_wp_cron
);
$result = wp_remote_post( $cron_request['url'], $cron_request['args'] );
return ! is_wp_error( $result );
たしかにwp cronを動かすためにcronでhttpリクエストしていることが読み取れますね。
解決法
ドメインからサーバーのIPアドレスが正引きできればよいので、ドメインのAレコードを問題の起きた新サーバーに向けれてWordPressが自分のWebサーバーにアクセスできれば良いのです。
参考