web-dev-qa-db-fra.com

Déclencher un cron toutes les 24h GMT -8

Je tiens à courir un cron toutes les 24 heures à minuit PST (= GMT -8)

C'est ce que j'ai

if ( !wp_next_scheduled( 'cron_hook' ) ) {
    //reset on 00:00 PST ( GMT -8 ) == GMT +16
    $timeoffset = strtotime('midnight')+((24-8)*HOUR_IN_SECONDS);
    if($timeoffset < time()) $timeoffset+(24*HOUR_IN_SECONDS);
    wp_schedule_event($timeoffset, 'daily', 'cron_hook');
}

Cela définit un cron quotidien sur minuit GMT -8 (24-8) et le reporte de 24 heures s'il est déjà passé pour que le cron ne soit pas déclenché au moment de la création.

Suis-je correct avec cette approche ou est-ce que je manque quelque chose?

Je l'ai déjà testé, mais mon serveur tourne avec GMT + 0. Je ne peux pas le vérifier pour un autre fuseau horaire.

3
Xaver

Presque,

Les tâches WP Cron ne sont pas exécutées à des heures spécifiques, elles sont approximatives et tous les horodatages doivent être au format UTC, comme WordPress toujours traite les horodatages UTC. Si vous voulez un PST de minuit, vous devrez spécifier 20h00 UTC.

De plus, par exemple, le code ci-dessus suggère PST de minuit, mais ne s'exécute pas à minuit. Si personne ne visite le site à l'heure spécifiée et qu'il reste 4 heures avant que quelqu'un n'arrive, le travail cron aura lieu à 4 heures du matin.

Si vous souhaitez des tâches cron précises et non approximatives, vous devez configurer une tâche cron de serveur pour appeler l'URL wp cron à des intervalles fixes.

Je choisirais également un nom plus spécifique que "cron_hook" pour éviter des conflits et des problèmes à l'avenir

Vous pouvez facilement tester ceci en déterminant simplement à quelle heure minuit PST est l'heure UTC, autrement dit 8 heures du matin. Votre cornjob est-elle renvoyée à 8 heures du matin?

1
Tom J Nowell