WordPressのwp-cron.phpを停止してサーバーの負荷を軽減する
投稿日:
WordPressでWEBサイトを構築する場合、サーバーの負荷を軽減するために「wp-cron.phpの自動実行を停止」することがあります。このページでは、wp-cron.phpの停止及びサーバーのCRONでwp-cron.phpが定期的に実行されるようにする設定の手順を解説します。もくじ
- 「wp-cron.php」の自動実行を停止する理由
- wp-cron.phpの自動実行を停止する
- サーバーのCRONでwp-cron.phpを定期的に実行する
「wp-cron.php」の自動実行を停止する理由
「wp-cron.php」は、サーバーのCRON(プログラムを自動実行させる機能)に頼らずにWordPressでCRON的なものを用意し、記事の予約投稿などの自動実行させたいものを自動で実行させられるようにするためのプログラムです(ファイルはWordPressをインストールしたディレクトリ…wp-adminディレクトリがあるところと同じ階層にあるはずです)。
とはいえ、サーバーのCRONに頼らずに完全にCRONと同様の機能を果たせるわけではありません。通常は(管理画面を含めて)WEBサイトへのアクセスが有った時にwp-cron.phpが実行され、実行予定時刻を過ぎていてなおかつまだ実行されていない処理(記事の予約投稿など)が実行されるようになっています。
ただ、このシステムでは、WEBサイトへのアクセスが少ない場合はwp-cron.phpが実行される回数も少ないので自動実行させたい処理が予定通りには実行されにくいです。また、WEBサイトへのアクセスが増えてきてもwp-cron.phpは律儀に毎回実行されるので、この場合は必要以上にwp-cron.phpが実行され、サーバーに余計な負荷がかかることになります。そこで、wp-cron.phpのWEBサイトへアクセスが有ったときの自動実行を停止し、代わりにサーバーのCRONを使ってwp-cron.phpを定期的に実行させるようにしてサーバー負荷の軽減を図ることがあるのです。
wp-cron.phpの自動実行を停止する
wp-cron.phpのWEBサイトへアクセスが有ったときの自動実行を停止するのは非常に簡単です。wp-config.phpに以下の1行を追記すればOKです。 [PHP] define(‘DISABLE_WP_CRON’, ‘true’); [/PHP]
追記する場所は define(‘DB_COLLATE’, ”); の後ろあたりで良いと思います。ただ、wp-cron.phpの自動実行を停止することでサーバーの負荷を軽減することはできますが、この操作を行うことでWP-Cronに依存する処理(記事の自動投稿など)が停止してしまうので、サーバーのCRONを使用して定期的(1~2時間に1回程度、必要ならサーバーリソースの許す範囲で更に高頻度にしても良い)にwp-cron.phpを実行する必要があります。
サーバーのCRONでwp-cron.phpを定期的に実行する
以下の設定は、サーバーのCRON設定を自分で行えることを前提としています。また、wp-cron.phpを実行するユーザーの設定にも注意が必要となります。
- さくらのレンタルサーバ ユーザーの場合は以下の内容の設定手順をこちらで解説しています
PHPで直接wp-cron.phpを実行する(ユーザー設定に要注意)
PHPで直接wp-cron.phpを実行する設定の手順を解説します。この方法を取る場合は、wp-cron.phpを実行するユーザーの設定には特に注意が必要です。(CentOS7+)Apacheを使用している場合は、
- PHPをモジュールモードで利用している場合は「apache」(Apacheの実行ユーザー)
- PHPをCGIモードで利用している場合はwp-cron.phpファイル(WordPress関連のファイル)の所有者
モジュールモードの場合はこのようになります。実行間隔とwp-cron.phpファイルのパスは各自の環境に合わせてください。 [VIM] #まずはCRONの設定ファイルを開く sudo vim /etc/crontab #以下の内容を追記する */10 * * * * apache /usr/bin/php-cgi /home/hoge/public_html/secret/wordpress/wp-cron.php [/VIM]
CGIモードの場合はこのようになります。実行間隔とユーザー名、wp-cron.phpファイルのパスは各自の環境に合わせてください。 [VIM] #まずはCRONの設定ファイルを開く sudo vim /etc/crontab #以下の内容を追記する */10 * * * * hoge /usr/bin/php-cgi /home/hoge/public_html/secret/wordpress/wp-cron.php [/VIM]
なお、複数のWEBサイトでWordPressを利用しているなどの場合は、wp-cron.phpファイルを実行するコマンドをシェルスクリプトにまとめ、それをCRONで実行しても良いです。
参考リンク