WordPressの予約投稿が失敗するからALTERNATE_WP_CRONをtureにしたらdoing_wp_cronが激増した

ある日アナリティクスを確認したら「url?doing_wp_cron=123131313131・・・」が激増してた。

原因は、WordPressの予約投稿が失敗するからALTERNATE_WP_CRONをtureにしたことです。

 

どのページのアクセスが多いかなどの計測が正しく出来ないから非常に邪魔です。

そもそもユーザー数に対してPV数が増えてるし、正しい計測が出来ていない??

ALTERNATE_WP_CRONとは

cronは、指定したタイミングでプログラムが実行される仕組みのことで、予約投稿した記事の公開をしたりするのに使います。

しかしcronはサーバーで設定する必要があり、WordPressの予約投稿はcronのように動いているだけの擬似的なものです。

 

具体的には、WordPressのサイトへアクセスされるたびにwp-cron.phpが実行されて、予約投稿された記事を公開したりします。

予約投稿の失敗の詳しい原因は分かりませんが、以下の設定を追加することで解決されました。

編集ファイル:wodrpressインストールディレクトリ/wp-config.php

上記の設定は、機能的には元々のWordPressの擬似cronと同じです。

異なる部分は仕組みが若干異なり、リダイレクトを使う点です。

これは毎回動くものでは無さそうです。

 

ただリダイレクトを使うことにより、PV数が倍にカウントされたりもしているようです。

それに擬似cronの分負担が増えて、サイトのパフォーマンスが下がってしまいます。

むしろ擬似cronは停止させる

ALTERNATE_WP_CRONを設定してもしなくても擬似cronは動きます。

動かし方が違うだけです。

そしてこの擬似cronは仕組み的にパフォーマンスが低下するようです。

 

むしろこの擬似cronは不要なんじゃないか?

とは言っても予約投稿を公開したり、定期的にバックアップとるプラグインが動かなくなったりします。

それは困ります。

 

だったら本物のcronで動かせばいいわけですね!

設定は後ほど説明するとして、まずは擬似cronを停止しましょう。

以下①と②の記述は「wodrpressインストールディレクトリ/wp-config.php」の「MySQL 設定」の上くらいに書きます。

 

①僕の場合はALTERNATE_WP_CRONを既に設定していたのでそれをまずコメントアウトします。

通常はこの記述は無いと思いますので次に進んでください。

 

②次に、擬似cronを停止する設定を追加します。

これで完了です。

次にcron設定を行います。

wp-cron.phpをcronで動かす

次にwp-cron.phpをcronで動かす設定をします。

cronの設定はレンタルサーバーのコントロールパネルから出来ます。

cronの設定方法は次の記事を参考にしてください。

≫ バッチ実行っていうんかな?cronでPHPを実行する方法

 

僕はXサーバーだったので以下の画像のように設定しました。

これで2分おきに実行されます。

試しに予約投稿してみたらちゃんと公開されてくれました!!

ログを見ても今のところ「url?doing_wp_cron=123131313131・・・」のようなアクセスはありません。

パフォーマンスの想定

ちなみにcronは2分おきじゃなく最短で1分おきの設定も可能でした。

2分で充分かと思ったので僕は2分にしました。

 

ちなみに、1ヶ月は60分×24時間×30日=43,200分となります。

毎分だと43,200回wp-cron.phpが実行されるということですね。

僕の場合は2分おきなので半分の21,600回です。

PVごとにwp-cron.phpが動くとしたら、月間21,600PV以上ある人はサーバーの負荷も軽減できそうです。

 

21,600PV無くても、アクセスのときに同時にwp-cron.phpを実行しなくてよくなるので、ユーザーの体感するパフォーマンスは確実に向上しているはずです。

まとめ

予約投稿もちゃんとされるし、変なURLのアクセスもないし、パフォーマンスも向上する!

もっと早く設定すればよかった!!

  1. ALTERNATE_WP_CRONは外す。(設定している人だけ)
  2. DISABLE_WP_CRONをtrueに設定する。
  3. wp-cron.phpをcronで動かす設定をする。

これでOKです。

是非試してみてください。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA