Siirry pääsisältöön

WordPress Cron

Miten määrittelen säännöllisiä ajoja (cron)?

Päivitetty tällä viikolla

Monissa vanhoissa oppaissa suositellaan lisäämään järjestelmän cron-tiedostoon esimerkiksi seuraava rivi */1 * * * * curl https://example.com/wp/wp-cron.php Tämä on kuitenkin vanhentunut neuvo, jota emme suosittele tekemään. Se voi pahimmillaan vahingoittaa nykyaikaisia WordPress-projekteja.

WordPress-cron toimii täysin valmiina, eikä kehittäjien tarvitse tehdä mitään erityistä sen suhteen. Jos haluat rekisteröidä omia aikataulutettuja tapahtumia, tutustu huolellisesti WordPress Cron API:hin sekä erinomaiseen WordPress Plugin Developer Handbookiin, jotta osaat suunnitella WordPress-laajennuksen tai teemakoodin oikein alusta alkaen.

Mitä on ajoitettu

Mikä tahansa laajennus tai teema voi ajoittaa tapahtumia, joten kunkin sivuston tapahtumaluettelo on yksilöllinen. Helpoin tapa tarkistaa se on käyttää wp-cli:tä:

wp cron event list
+----------------------------+--------------+----------------+-----------+
|hook | next_run_gmt | next_run_ |recurrence |
| | | relative | |
+----------------------------+--------------+----------------+-----------+
|check_plugin_updates-builder| 2019-03-15 | now | 12 hours |
| -pro-update | 11:16:12 | | |
|wp_privacy_delete_old_export| 2019-03-15 | 1 minute | 1 hour |
| _files | 11:18:22 | 25 seconds | |
|wp_update_plugins | 2019-03-15 | 5 hours | 12 hours |
| | 17:16:29 | 59 minutes | |
|wp_update_themes | 2019-03-15 | 5 hours | 12 hours | | | 17:16:29 | 59 minutes | |
|wp_version_check | 2019-03-15 | 6 hours | 12 hours |
| | 17:18:01 | 1 minute | |
|check_plugin_updates | 2019-03-15 | 6 hours | 12 hours |
| -wppb-bdp-add-on | 17:36:46 | 19 minutes | |
| sm_ping_daily | 2019-03-15 | 7 hours | 1 day |
| | 18:20:52 | 3 minutes | |
| wp_scheduled_auto_draft | 2019-03-15 | 7 hours | 1 day |
| _delete | 18:50:37 | 33 minutes | |
| trigger_live_discussion | 2019-03-18 | 2 days |Non- |
_notification | 07:40:00 | 20 hours |repeating |
| trigger_live_discussion | 2019-04-08 | 3 weeks | Non- |
| _notification | 12:45:00 | 3 days | repeating |
+----------------------------+--------------+----------------+-----------+

Huomaa sarake next_run_relative. Jos siinä on paljon now -merkittyjä kohteita ja ne pysyvät sellaisina, se on merkki siitä, että cron ei toimi oikein. Jos kehittäjä tekee verkkohakua sanoilla ”WordPress” ja ”cron”, hän löytää usein neuvoja curl- tai wget-komentojen ajamisesta järjestelmän cronista. Tällaiset neuvot ovat vanhentuneita ja ne tulisi hylätä kokonaan, koska ne eivät ratkaise ongelmaa lainkaan. Älä koskaan tee niin. Jos aikataulutetussa tapahtumassa on ongelma, koodi on debugattava ja korjattava.

Cronien testaaminen

wp-cli:ssä on sisäänrakennettu ominaisuus, jolla voi testata croneja. Se voi näyttää esimerkiksi tältä onnistuessaan:

wp cron test 
Success: WP-Cron spawning is working as expected.

Esimerkki epäonnistuneesta cronista:

wp cron test 
Error: The DISABLE_WP_CRON constant is set to true. WP-Cron spawning is disabled.

Vaihtoehtoisesti voit yrittää suorittaa kaikki erääntyneet tapahtumat:

wp cron event run --due-now 
Executed the cron event 'check_plugin_updates-profile-builder-pro-update' in 0.175s.
Success: Executed a total of 1 cron event.

On myös mahdollista käynnistää yksittäinen tapahtuma:

wp cron event run check_plugin_updates-profile-builder-pro-update Executed the cron event 'check_plugin_updates-profile-builder-pro-update' in 0.17s. 
Success: Executed a total of 1 cron event.

Jos funktio suoritetaan eikä virheitä näy välittömästi tai tiedostossa /data/log/php-error.log, kyseisen funktion koodi todennäköisesti toimii.

WordPress Cronin käynnistäminen järjestelmän Cronista

Tätä ei suositella, mutta jos jostain syystä haluat käynnistää WP cronin järjestelmän cronista, lisää seuraava rivi crontab-tiedostoon:

* * * * * /usr/local/bin/wp cron event run --due-now >> /data/log/wp-cron.log 2>&1

Crontab-syntaksi voi olla hieman sekava, joten suosittelemme kokeilemaan crontab.gurun interaktiivista aputyökalua ennen crontabin lisäämistä. Kannattaa myös harkita sekä stdout- että stderr-lokien kirjaamista, kuten yllä olevassa esimerkissä, tai MAILTO-määritelmän käyttöä, jotta crontab-tapahtumista saa ilmoituksen sähköpostitse.

Aikavyöhykkeet

Kun teet aikakriittisiä asioita, muista, että Seravon palvelimien laitteistokellot on asetettu UTC-aikaan ja järjestelmän aikavyöhykeasetus on palvelinklusterin sijainnin mukainen.

Muista myös, että WordPress nollaa kaikki aikavyöhyketiedot ja WordPressin sisällä aikavyöhyke on aina UTC. Aikojen tulostamiseen WordPressin sisällä käytä erityisiä WordPressin aikafunktioita the_date() ja the_time(). Katso alla olevat esimerkit:

date -R 
Fri, 22 Mar 2019 10:00:00 +0200

php -r "echo date('r');"
Fri, 22 Mar 2019 10:00:00 +0200

wp eval "echo date('r');"
Fri, 22 Mar 2019 08:00:00 +0000
Vastasiko tämä kysymykseesi?