wp-cron.phpとは何か?
MixHostのcPanelの「メトリック」「訪問者」を見ていると、時折、妙なアクセスがある。
/wp-cron.php?doing_wp_cron=xxxxxxxxxxx.xxxxxxxxxxxx
といった感じ。実際にはxxxのところには数字が入る。
wpはWordPressのことで、末尾のphpはPHPのスクリプトを表わしている。cronは、UNIXのcronと同じ。つまり、指定の時刻が来るなど、何らかのトリガーで起動されるスクリプトで何かの作業をする。要するにWordPressに何かのトリガーで仕事をさせるためのものである。wp-cron.phpにアクセスすると記事の予約投稿などがないか探して公開するというような使い方をするものである。
一般にアクセス可能なPHPスクリプトというのはセキュリティ上微妙に不安だし、サイトにアクセスがあるたびに起動されるので、アクセスが増えてくるとサーバのレスポンスが悪くなったりするだろう。wp-cron.phpは無効化しておいて、一定時間ごとにホンモノのcronで処理してやった方がいい。
wp-config.phpに追記
wp-cron.phpを無効にするには、wp-config.phpの末尾に次のように書き込む。
define('DISABLE_WP_CRON', 'true');
これでWordPressはサイトアクセスのつど、wp-cron.phpを実行することはなくなる。しかし、wp-cron.phpは、予約投稿以外にアップデートの通知やバックアップにも使われているので、完全に停止してしまうと不都合が出るかもしれない。1日に1回くらい実行しておいたほうがいいだろう。これは、ホンモノのcronでやる。
SSHでサーバにログインして、crontabを編集というのが昔の王道だが、今はウェブから操作するのが主流である。玄人向けといわれるmixihostでも同様。
まず、mixhostのcPanelから「詳細」「cronジョブ」を選択。
wp-cron.phpの実行頻度をどれくらいにするべきかは環境による。WordPressで使っているプラグインによっては頻繁なwp-cron.phpの実行が必要な場合もある。さしあたり、1日に1回、午前5時に設定してみた。
「コマンド」のところに次のように書く。
/usr/local/bin/php -q /document-root/wp-cron.php
mixhostの場合、/usr/local/bin/phpは、実際に割り当てられているPHPのバージョンによって名前が変わる。cPanelのcron設定のところにリンクがあり調べられる。ドキュメントルートはそれぞれのWordPressのドキュメントルートへのパスを書く。
「新しいcronジョブの追加」をクリックして終了。
これでだいぶサーバの負荷が軽くなったはず。ま、アクセス数が知れているうちはあんまり関係ないけれど。