Soporte » Multisitio » Tarea cron en multisitio

  • Resuelto Jose Lazo

    (@jose-lazo)


    Hola,

    Tengo una instalación multisitio con 6 sitios y he creado un script en mu-plugins para contar cada domingo los usuarios registrados en cada sitio diferenciando perfiles y algún usermeta y escribirlos en una hoja de Google Sheets.

    Hasta aquí todo normal, pero para hacer correr el script he creado un cron job con el siguiente snipe:

    
    /**
     * Create cron job
     */
    // First add weekely schedule
    function add_weekly_schedule($schedules)
    {
        // add a 'weekly' schedule to the existing set
        $schedules['weekly'] = array(
            'interval' => 604800,
            'display' => __('Once Weekly')
        );
        return $schedules;
    }
    add_filter('cron_schedules', 'add_weekly_schedule');
    
    // Now create cron job weekely to execute CountRegisters function
    if (!wp_next_scheduled('count_registers_weekly')) {
        $sunday = strtotime("next Sunday");
        wp_schedule_event($sunday, 'weekly', 'count_registers_weekly');
    }
    add_action('count_registers_weekly', 'CountRegisters');
    

    siendo CountRegisters la función de conteo.

    El problema es que lo ejecuta cada domingo ¡seis veces! (una por cada sitio). ¿Cómo puedo hacer que sólo se ejecute una vez?

    NOTA: lo añadí a los mu-plugin con la esperanza de que se ejecutase de forma global sólo una vez.

    • Este debate fue modificado hace 2 meses, 1 semana por  Jose Lazo.

    La página con la que necesito ayuda: [accede para ver el enlace]

Viendo 3 respuestas - 1 de 3 (de 3 total)
  • Moderador LGrusin

    (@lgrusin)

    Según tengo entendido el cron se ejecuta por sitios no por multisitio.

    No sé si este enlace te puede servir de ayuda
    https://vpsfix.com/7456/setup-proper-cron-jobs-wordpress-multisite-network/

    Gracias @lgrusin,

    Ese era el último recurso: crear un cron job en servidor que llame a la función CountRegisters() cada domingo, lo que actualmente hace el cron de WP. El departamento de Sistemas de mi empresa es algo burocrática y quería evitar peticiones.

    Pensaba que habría algún parámetro u otra función que ejecute crons en WP multisite una sola vez, no por sitio instalado. Imagina que tuviese 500 sitios, jeje.

    Abriré petición a Sistemas 🙁

    Finalmente he optado por añadir la fecha de ejecución a la tabla wp_option y compararla cada vez que se vaya a ejecutar para ejecutarla sólo si hace más de una semana:

    
    // First check if it has already been executed once to avoid run
    // it in each site
    $run_once     = get_site_option('run_once', 1531526400);
    $one_week_ago = strtotime('-1 week');
    
    if ($run_once >= $one_week_ago) {
        exit;
    } else {
        update_site_option('run_once', time());
         // Toda la funcionalidad aquí
    }
    

    Por si le sirve a alguien

Viendo 3 respuestas - 1 de 3 (de 3 total)
  • Debes estar registrado para responder a este tema.