• カミナリツイッターカミナリtwitter
  • カミナリフェイスブックカミナリfacebook
  • カミナリインスタグラムカミナリinstagram

山陰の情報を発信するカミナリ

ナビ

01

MAY

ウェブFRIDAY 2020 / 5 / 1

wp cron による定期実行の2回目以降が正常動作しない場合の対処法

WordPressには wp cron という(疑似)定期実行システムがあるのですが、
登録した処理が1回目は正常に動作するものの、2回目以降は正常動作しないケースがありました。

なお、この際に定期実行される処理は
・HTMLキャッシュ再生成のために、file_get_contentsで自サイトにアクセス
・1~3秒ほどかかり少々負荷が高い
ものでした。

正常に動作しなかった際の書き方

add_action('my_hook_name', 'my_function_name');
if(! wp_next_scheduled('my_hook_name')){
  wp_schedule_event(time(), 'everyfiveminute', 'my_hook_name');
}

function my_function_name(){
  // イベント処理
}

 

結果として、下記のように time() + 10 として初回実行を 登録直後 にするのではなく、登録から10秒後に実行する、というようにしたところ正常に動作するようになりました。

add_action('my_hook_name', 'my_function_name');
if(! wp_next_scheduled('my_hook_name')){
  wp_schedule_event(time() + 10, 'everyfiveminute', 'my_hook_name');
}

function my_function_name(){
  // イベント処理
}

 

おそらく、
 1. アクセス (A) が発生
 2. (A) wp cron にイベント登録
 3. 2のイベントを即時実行
 4. アクセス (B) が発生
 5. (B) wp cron にイベント登録
のように、想定外のタイミングで同様の処理が発生して無限ループに近い症状が起きているのではないかなと思われます。

なお、wp cron の動作状況の確認には WP Crontrol が便利です。
 ・実行まであとどのくらいか?
 ・イベントの即時実行
 ・イベントの削除
等が簡単に確認/操作できデバッグしやすいです。

松本博之隠しプロフィール画像

TEXT by

松本 博之まつもとひろゆき)

1978年、鳥取県米子市生まれ。
株式会社マジックワード WEBシステムの開発・運用を担当。

WordPressの実績多数。表面的な使用方法を把握するだけでなく、WordPressのソースコードを読み解いて対応できます。
国家資格の基本情報処理技術者を保持。

この人が書いた他の記事を読む