web-dev-qa-db-ja.com

Wp-cronは同時にスケジュールされたすべてのタスクを同時に実行しますか。

私はプラグインを開発していて、cronタスク(cron_task_testとしましょう)を追加したいのですが、疑問があります。 15個のタスク(複数のプラグインまたはユーザー自身によってスケジュールされている可能性があります)が自分のタスク(cron_task_test)と同時に実行されるようにスケジュールされている場合最初の作業に1分以上かかった?それともすべてが相次いで解雇されますか

一言で言えば、cron_lockはどのように動作しますか?次々に実行される場合、すべてのタスクを1つずつ実行しているメインのcronスレッドがサーバーの最大実行時間制限(通常30秒)を超えないようにしますか?

自分のタスクの前に他のcronタスク(cron_task_test)がエラーをスローしたり制限時間を超えたりした場合はどうなりますか?

2
learning_13

たとえば、12:00頃には3つのタスクが実行されます。

wp-cronを使用した場合は、誰かがあなたのページを12:00に訪れたときに開始されます。 (2人のユーザーがまったく同じ瞬間にあなたのページにアクセスするとcronが2回起動してすべてが2回実行される可能性があるため、ここで小さな問題が発生します)。

しかし、誰かが私たちのページを12:00に開いてcronが始まります。スケジュールされたすべてのイベントを配列で取得します。 cronがビジーであることをtransientに設定し、call_user_func_arrayを使用してforeachステートメント内のすべてのプロセスを開始します(これは、do_actionとほぼ同じですがarrayの場合)。

foreach内のプロシージャー:

  • 必要に応じてスケジュールを変更します。
  • 仕事の開始前にスケジュールを解除します。
  • call_user_func_array(仕事をします);
  • フックが長すぎて他のcronプロセスがロックを盗んだ場合、cronはループを終了します。

私のちょっとしたコツ:

  • crontabはより良い解決策になり得ます。
  • cronタスクをテストするためのログ記録を忘れないでください。
  • cronの仕事の1つが失敗しても他の仕事には影響しません(間違っている場合は修正してください)。

ここにあなたは私の友人によって記事に書かれたいくつかの追加情報があります: wordpressのためのCronソリューション