wp_schedule_event und Sommerzeit

Lesezeit: 3 Minuten

Also bin ich heute Morgen auf ein Problem auf einer Website gestoßen, die WP Cron verwendet. Der Code sieht so aus:

//Schedule the cron to run if not scheduled
if ( ! wp_next_scheduled( 'my_check_cron_event' ) ) {
    wp_schedule_event( strtotime('tomorrow America/New_York') , 'daily', 'my_check_cron_event' );
}

Das Problem ist ziemlich einfach. Dieser Code funktioniert gut, im Wesentlichen möchte ich die Funktion jeden Tag um Mitternacht Ortszeit ausführen. Wenn ich also die Funktion zum ersten Mal ausführe, erhält sie den Zeitstempel für morgen Mitternacht – Ortszeit. Und seitdem läuft die functino.

Jetzt an diesem Wochenende – wegen der Sommerzeit wird die Funktion eigentlich nie neu geplant – sie ist nur so eingestellt, dass sie alle 24 Stunden ausgeführt wird. Die Funktion begann also um 23 Uhr. Das ist natürlich leicht zu beheben – geht aber wieder kaputt. Ich finde keine wirklich guten Beiträge zu dem Thema – wie würdet ihr damit umgehen:

wp_schedule_event wird täglich ausgeführt, wenn sich die Sommerzeit ändert?

Nur um hier offensichtlichen Antworten vorzubeugen: Ich kann keinen richtigen Cron ausführen – es muss über wp erfolgen. Unser Host unterstützt es einfach nicht, es ist scheiße – aber das ist der Client. Jeder Rat wäre sehr dankbar!

  • Sie müssen also Veranstaltungen danach planen, wie lange Tageslicht vorhanden ist?

    – Bas van Dijk

    5. November 2018 um 16:42 Uhr

  • Haben Sie UTC mit New Yorker Zeitzone in den WordPress-Einstellungen konfiguriert (ich denke, das selbst wird funktionieren)?, WP Cron funktioniert nur, wenn der Benutzer es besucht. Wenn während der festgelegten Zeit keine Besuche erfolgen, wird es nicht ausgeführt, und wenn ein Benutzer nach der Zeit zu Besuch kommt, wird es sofort ausgelöst und die nächste geplante Zeit festgelegt, sodass Sie kein Ergebnis wie Server-Cron erwarten, hoffen Sie, dass Sie sich dessen bereits bewusst sind?

    – Vignesh Pichamani

    5. November 2018 um 18:43 Uhr

  • Ich muss es nicht basierend auf dem Tageslicht planen, ich muss es unabhängig vom Tageslicht um Mitternacht Ortszeit ausführen. Die Zeitzone ist richtig konfiguriert – Und ich habe ein Ping-Setup, um den Server zur richtigen Zeit zu treffen, um diesen Cron auszuführen, ich verstehe das alles. Das Problem ist, dass der Cron SELBST alle 24 Stunden ausgeführt werden soll – ab dem Zeitpunkt, an dem er zum ersten Mal festgelegt wird. Dieser 24-Stunden-Countdown muss sich ändern, wenn sich die Zeitzone ändert, um um Mitternacht weiterzulaufen.

    – JBoss

    4. Februar 2019 um 15:49 Uhr

Für alle, die darauf stoßen, musste ich heute für eine dauerhafte Lösung darauf zurückkommen – da sich die Sommerzeit ändert! Das Hauptproblem hier ist, dass wp_schedule_event – einen Parameter akzeptiert, der eine Anzahl von Sekunden bis zum nächsten Lauf ist. Dieser Parameter wird im Cron-Array gespeichert – und es ist wirklich egal, in welcher Zeitzone Sie sich befinden. Es läuft einfach in diesem Intervall weiter. Um dies zu beheben, musste ich zu wp_schedule_single_event wechseln.

Es scheint kontraintuitiv zu sein, weil wir möchten, dass dies in einem Intervall ausgeführt wird. Aber der Unterschied ist – wir MÜSSEN den nächsten Zeitstempel für die Ausführung neu berechnen:

if ( ! wp_next_scheduled( 'my_check_cron_event' ) ) {
   wp_schedule_single_event( strtotime('tomorrow America/New_York'), 'my_check_cron_event' );
}

Der Unterschied hier ist, dass strtotime() jeden TAG den richtigen Zeitstempel erhält – unter Berücksichtigung der Sommerzeit, anstatt einfach alle 24 Stunden ausgeführt zu werden. Hoffe das hilft jemandem!

  • Vielen Dank für die Bereitstellung der Antwort! Das ist Gold wert, Sie müssen nicht einmal daran denken, die Cron-Jobs danach zu bereinigen 😜

    – TASan

    4. April 2022 um 14:32 Uhr

1442590cookie-checkwp_schedule_event und Sommerzeit

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy