0

ロードバランサーの背後にあるマルチマスター DB を備えた環境で Wordpress を実行しています。WP が wp_options の cron テーブルを更新しようとしたときに、エラー ログがデッドロック エラーでいっぱいになりました。wp-cron を完全に無効にしましたが、まだエラーが表示されるため、2 つの質問があります。

1) wp_options の cron テーブルが更新される原因は何ですか?

2)ページが読み込まれるたびに実行されるようですこれを無効にして、crontab で定期的に実行するように cronjob を設定できますか?

ありがとう

4

2 に答える 2

1

Wordpress は、ユーザーが Unix 経由で cron ジョブにアクセスできない場合、またはセットアップしたくない場合に、スケジュールされたタスクを実行する手段として wp-cron.php を使用します。このプロセスは、wp_options の cron テーブルでスケジュールされたジョブを調べ、指定された時間 (またはそれ以上) が経過した場合、ジョブが実行されます。

wp-cron.php は wp-includes/cron.php (Wordpress Cron API) を使用してスケジュールされたジョブを実行します。cron.php には、cron テーブル テーブルを更新する多くの関数があります。これらの関数は、イベントのスケジューリングに関するものです。

スケジュールされたイベントを必要とする Wordpress またはプラグインのすべての機能は、Cron API を使用して実行します。ただし、イベントをスケジュールするアクションは (既に存在する場合でも)、wp_options の cron テーブルを更新します。wp-cron.php が完全に無効になっている場合でも、Wordpress/プラグインのこれらの要素はイベントをロードしてスケジュールし、その過程で cron テーブルを更新しようとします。

DB/サイト構成に関連している必要があることを除いて、デッドロックが発生する理由を正確には理解していませんが、Wordpress 自体が動作していることはわかっています。

于 2013-03-18T08:51:09.453 に答える
0

これと同じ問題に遭遇しました。データベースがすぐに同期しなくなります。特定のプラグインはそれをより高速に実行させましたが (多くの cron ジョブをスケジュールしました)、それらを無効にしても、最終的にはエラーによってレプリケーションがブロックされました。

2 つのことを行うことで、レプリケーションを機能させ続けることができました。

最初に、my.iniに以下を追加しました:

slave-skip-errors = 1062

これは、重複キーが既に存在する場合、MySql にエントリの作成をスキップするように指示します。私のクラスターはアクティブ-パッシブとして設定されているため、理論的には、アクティブ ノードがダウンしていない限り、パッシブ MySql ノードへの「実際の」書き込みは行われないはずです。その場合、そのノードへの「実際の」書き込みは行われません。パッシブ ノードに書き込まれる唯一のものは、(理論上は) アクティブ ノードでも実行されている wp-cron ジョブの結果です。

2 つ目は、各サイトのwp-config.iniに次を追加することでした。

/** disable cron */
define('DISABLE_WP_CRON', true);

これにより wp-cron の実行がまったくブロックされるため、これらのソリューションのいずれかが単独で機能するはずです。

もう 1 つのオプションは、wp-cron を無効にすることですが、完全なデータベースの同期はそのままにして、各サイトの wp-cron.php を呼び出すスクリプトをスケジュールします (wp-cron サービスが自動的に行うことを手動で行うことになります)。そうすれば、アクティブ ノードでのみ実行され、データは問題なくパッシブ ノードに同期されます。

于 2013-05-21T13:39:19.067 に答える