强制Cron仅在一台服务器上运行

时间:2013-02-05 作者:Tom J Nowell

给定一个在服务器a和服务器B上运行的站点,带有负载平衡器、共享数据库/等,以及一个常规的wp cron任务,我如何确保wp cron只在服务器a上运行,而不在服务器B上运行?

2 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

我目前正在wp config中对此进行测试。php:

if ( php_uname(\'n\') == \'wp4\' ) {
    define(\'DISABLE_WP_CRON\', true);
}
其中wp4是安装中第二台服务器的名称

SO网友:fischi

我会在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\' );
这应该可以奏效。

结束