Large Wordpress CRON job

时间:2021-03-31 作者:Daniel Kozina

我正在编程与外部API(房地产)的集成。我有一份CRON工作,计划在凌晨1点完成。它运行得很好,因为我使用的是服务器CRON initialize,而不是WP-CRON-standard,所以它在正确的时间运行。

这是我的计划作业功能:

function wcs_cron_system_update() {

    wcs_cron_start_update();

    $wcs_cron_actions = new WCS_Cron_Actions();
    $wcs_cron_helpers = new WCS_Cron_Helpers();

    $wcs_cron_actions->real_estate_cleaning();
    $wcs_cron_helpers->remove_unused_images();

    $wcs_cron_actions->investments_insert_sql();
    $wcs_cron_actions->apartments_insert_sql();
    $wcs_cron_actions->commerce_insert_sql();

    $wcs_cron_actions->investments_insert();
    $wcs_cron_actions->real_estate_insert();

    $wcs_cron_actions->investment_update_by_single_real_easte();
    $wcs_cron_actions->real_estate_update_by_single_investment();
    $wcs_cron_actions->investment_update_by_all_real_easte();
    $wcs_cron_actions->search_index_update();


}
我正在一个接一个地执行一些函数,因为在执行下一个函数之前,我需要一些数据。我不能单独安排CRON作业(我不知道该怎么做),因为我有一些情况,某些函数在我有必要的数据之前就运行了(因为有些函数在应该运行之前就运行了)

我的函数包含一系列任务(函数)。

问题:这是正确的方法吗?也许我应该换一种方式?怎样

谢谢

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

我不能单独安排CRON作业(我不知道该怎么做),因为我有一些情况,在我有必要的数据之前运行了一些函数

做到这一点的关键是安排第一个作业每天在所需的时间运行,并让该事件在完成后创建所有其他作业。

function wcs_cron_system_update($step = 0) {
    switch ($step) {
        case 0:
            // do what has to be done first
            break;
        case 1:
            // second step
            break;
        case 2:
            // etc
            break;
    }
}
如果你这样开始,你可以通过$step 作为一个论据。因此,它在每日cron上执行步骤0。

完成第一步后,您可以调用wp_schedule_single_event() 就像这样

\\wp_schedule_single_event(
    // start in 5min
    \\current_time(\'timestamp\') + (5 * 60),
    \'same_hook_as_daily_cron\',
    [1]
);
这将为您的第二步创建一个事件。完成后,只需为第三步创建一个事件。确保your add_action code allows for arguments.

SO网友:Tom J Nowell

问题:这是正确的方法吗?也许我应该换一种方式?怎样

没有正确的方法可以做到这一点,这取决于您的cron作业打算做什么。如果您的cron作业运行,那么它是正确的。如果没有,那就不是了。