WordPressのwp-cronをOSのcronで実行する方法

WordPressのwp-cronをOSのcronで実行する方法

WordPressでは、WordPress上のジョブを定期実行するために「wp-cron」と呼ばれる機能が搭載されていますが、wp-cronは、Webサイトへのアクセスをトリガーに実行されるため、アクセスの少ないWebサイトだと、アクセスをトリガーにした実行ではなかなかwp-cronが実行されないケースがあります。

そのようなとき、Linux環境でWordPressを稼働させているなら、wp-cronをOS(オペレーティングシステム)のcronから実行するように変更することで、指定した間隔でwp-cronを実行させることができます。

そこでここでは、Wordpressの「wp-cron」をOSの「cron」で実行する方法を紹介します。

wp-cronとは

wp-cronは、WordPressで行われるさまざまな処理(ジョブ)を定期的に実行するための仕組みで、WordPressやプラグインのアップデートなどの処理がwp-cronで行われています。

wp-cronは、デフォルトではWebサイトへのアクセスをトリガーにして実⾏すべき処理がないかを確認していますが、アクセスの少ないWebサイトでは、アクセスをトリガーにした実行ではなかなかwp-cronが実行されないケースがあります。

自分のWordPress環境でどのようなジョブが定義されているかは「WP Crontrol」というプラグインをインストールすることで確認できます。

WP Crontrol – WordPress プラグイン | WordPress.org 日本語

WordPressのwp-cronをOSのcronで実行する方法

WP Crontrolの画面

wp-cronからOSのcronへ変更

wp-cronをOSのcronから定期実行するよう変更する手順は、次のとおりです。

wp-cronの無効化

まず、WordPressの設定ファイル「wp-config.php」に以下の内容を追記して、wp-cronを無効化します。

define('DISABLE_WP_CRON', 'true');
/* 編集が必要なのはここまでです ! WordPress でブログをお楽しみください。 */

wp-config.phpへの追記箇所は、「編集が必要なのはここまでです ! WordPress でブログをお楽しみください。」というコメント行の直上です。

OSのcronの設定

つぎに、OSのcronでwp-cronを定期的に実⾏するように、cronに設定を追記します。たとえば、/etc/crontabに以下のように追記します。

# vi /etc/crontab

* * * * * nginx /usr/bin/php -q /var/www/html/wp-cron.php >/dev/null
  • 「* * * * *」の部分は実行間隔を指定しており、この場合は毎分実行されます。「*/10 * * * *」と指定すれば、10分ごとに実行できます。
  • 「nginx」の部分は、Webサーバーを実行しているユーザーを指定してください。Webサーバーがnginxなら「nginx」、Apacheなら「apache」などのユーザー名を指定します。
  • 「/usr/bin/php」の部分は、PHPコマンドのパスを指定してください。通常はこのままで問題ないと思います。
  • 「/var/www/html/wp-cron.php」の部分は、WordPressをインストールしたディレクトリのwp-cron.phpファイルのフルパスを指定してください。

以上で設定完了です。

あとがき

設定変更後に、WordPressのジョブがcronで実行されているかは、WordPressプラグイン「WP Crontrol」で確認するとよくわかります。

WP Crontrol – WordPress プラグイン | WordPress.org 日本語