WordPressのwp-cron.phpをサーバーのcronで実行する

WordPressでのタスクスケジュール実行機能

WordPressでは、予約投稿などを実現する為にアクセスがあった際にwp-cron.phpを実行して、予約時間を経過しているかチェックし経過している場合は記事を公開するといった仕組みを実装しています。いわば疑似cronというわけです。

誰もアクセスしなければ、いつまでも処理が実行されませんし、逆にアクセスの度にwp-cron.phpが実行されてしまう為、負荷も考慮しないといけません。

そこで、まず、wordpressでアクセスされる度に実行されるのを無効化し、サーバのcronで定期的に実行するようにします。

wordpress側でのwp-cron.phpの無効化

wpconfig.php に以下を追加します。

define('DISABLE_WP_CRON', true);

サーバ側でのwp-cron.phpのcron設定

/etc/crontab に以下のスケジュール実行を登録します。
*/10 で10分毎の実行。実行ユーザーは httpd としています。

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed
*/10  *  *  *  * httpd /bin/php -q /home/kusanagi/xxx/DocumentRoot/wp-cron.php >/dev/null 2>&1

実行ユーザーは環境により異なるかと思います。(httpd/apache/nignx等)
また、php の絶対パスは、サーバ上でwhich php などして確認してください。

ここで注意ですが、必ずWebサーバーのユーザーで実行します。そうでないとWebサーバーが書き込む際にパーミッションエラーになってしまう危険性があります。
root で crontab -e でcron設定などしないように注意してください。

コメントを残す

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

  • ad