web-dev-qa-db-fra.com

Le travail externe externe se déclenche trop souvent

Les tâches cron de Wordpress semblaient causer des problèmes sur notre serveur, alors j'ai ajouté ceci au bas de notre fichier wp-config.php:

define('DISABLE_WP_CRON', 'true');

Et ajouté ceci en utilisant 'crontab -e':

*/15 * * * * /usr/bin/php /path/to/wordpress/wp-cron.php > /var/log/cronoutput.log

Si je ne me trompe pas, notre serveur exécute les travaux Wordpress toutes les 15 minutes.

Pour tester, j’ai ajouté une tâche cron dans le fichier de thème functions.php qui m’a simplement envoyé un courrier électronique. J'ai ajouté le cronjob avec ce code dans functions.php:

function my_cron_schedules($schedules){
    if(!isset($schedules["5min"])){
        $schedules["5min"] = array(
            'interval' => 5*60,
            'display' => __('Once every 5 minutes'));
    }
    if(!isset($schedules["30min"])){
        $schedules["30min"] = array(
            'interval' => 30*60,
            'display' => __('Once every 30 minutes'));
    }
    return $schedules;
}
add_filter('cron_schedules','my_cron_schedules');

// Schedule an action if it's not already scheduled
if ( ! wp_next_scheduled( 'isa_add_every_five_minutes' ) ) {
    wp_schedule_event( time(), '5min', 'isa_add_every_five_minutes' );
}

// Hook into that action that'll fire every three minutes
add_action( 'isa_add_every_five_minutes', 'isa_add_every_five_minutes_func' );
function isa_add_every_five_minutes_func() {
    mail( '[email protected]', 'this is a cron job', '' );
}

Ensuite, j'ai attendu que les emails arrivent.

Ce à quoi je m'attendais: un e-mail toutes les 15 minutes, car les tâches cron ne doivent s'exécuter que toutes les 15 minutes, n'est-ce pas?

Mais ce qui s'est passé c'est que:

  1. Le courrier électronique a été envoyé environ toutes les 5 minutes, comme configuré dans le code, même si le travail cron sur le serveur doit être déclenché toutes les 15 minutes.
  2. Habituellement, un seul e-mail est envoyé à la fois, comme prévu, mais parfois plus d'une douzaine d'e-mails sont envoyés à la fois.

Mes questions sont donc les suivantes: comment se fait-il que les tâches cron soient toujours exécutées toutes les 5 minutes, alors que le fichier wp-cron.php ne doit être exécuté que toutes les 15 minutes?

Et comment est-il possible que le travail cron soit parfois exécuté plus d'une douzaine de fois en une minute?

1
user2202070

Vous appelez peut-être wp-cron.php toutes les 15 minutes, mais votre tâche périodique doit se dérouler toutes les 5 minutes!

    $schedules["5min"] = array(
        'interval' => 5*60,
        'display' => __('Once every 5 minutes'));

...

wp_schedule_event( time(), '5min', 'isa_add_every_five_minutes' );

Changez-le plutôt toutes les 15 minutes

1
Tom J Nowell