ロードバランサ、共有データベース/ etc、および通常のwp-cronタスクを使用して、サーバーAとサーバーBでサイトが実行されているとします。
私は現在wp-config.phpでこれをテストしています:
if ( php_uname('n') == 'wp4' ) {
define('DISABLE_WP_CRON', true);
}
Wp4は、セットアップ内の2番目のサーバーの名前です。
wp_config.php
には、どのサーバーにいるのかを定義する定数を作成します。これまでのところ非常に良い、本当に魔法ではありません。
注意が必要なのは、cronを確実に実行し、誤って間違ったサーバーになっても中止しないようにすることです。このような機能を試してください。
function my_cron_callback() {
if ( MY_SERVER_SETUP == "SERVER_A" ) {
do_the_cron_action();
} else {
set_transient( 'do_the_cron_on_server_a', 'true' );
}
}
これで、cronが他のサーバーで実行されるときに一時的な設定が行われましたが、実行されません。関数do_the_cron_action
はあなたのスクリプトを含みます。
最後のステップは、関数をinit
にフックして、サーバーがServerAであるかどうか、および一時が設定されているかどうかを確認することです。
function check_if_a_should_execute() {
if( MY_SERVER_SETUP == "SERVER_A" && get_transient( 'do_the_cron_on_server_a' == 'true' ) {
do_the_cron_action();
delete_transient( 'do_the_cron_on_server_a' );
}
}
add_action( 'init', 'check_if_a_should_execute' );
これでうまくいくはずです。