Siirry pääsisältöön

WordPress Cron ja ajastetut tehtävät

Opi kuinka WordPressin ajastetut tapahtumat (WP-Cron) toimivat Seravon ympäristössä, kuinka testaat niitä WP-CLI:n avulla ja milloin cron kannattaa siirtää järjestelmätasolle.

WordPressin sisäänrakennettu cron-järjestelmä (WP-Cron) on suunniteltu suorittamaan säännöllisiä tehtäviä, kuten julkaisemaan ajastettuja artikkeleita, tarkistamaan lisäosien päivityksiä tai suorittamaan varmuuskopioita.

Seravon ympäristössä WordPress-cron toimii oletuksena täysin automaattisesti, eikä kehittäjien tarvitse tehdä siihen erillisiä määrityksiä. Oletuksena cron käynnistyy aina silloin, kun joku vierailija lataa sivuston.

Ajastettujen tehtävien tarkistaminen

Jokaisen sivuston ajastettujen tapahtumien luettelo on yksilöllinen ja riippuu käytetyistä lisäosista. Helpoin tapa tarkistaa vireillä olevat tehtävät on ottaa sivustolle SSH-yhteys ja käyttää WP-CLI-komentoa:

wp cron event list

Komento tulostaa listan kaikista ajoitetuista tapahtumista:

+------------------------------+---------------------+-----------------------+------------+
| hook | next_run_gmt | next_run_relative | recurrence |
+------------------------------+---------------------+-----------------------+------------+
| wp_privacy_delete_old_export | 2026-03-15 11:18:22 | 1 minute 25 seconds | 1 hour |
| wp_update_plugins | 2026-03-15 17:16:29 | 5 hours 59 minutes | 12 hours |
| wp_version_check | 2026-03-15 17:18:01 | 6 hours 1 minute | 12 hours |
| sm_ping_daily | 2026-03-15 18:20:52 | 7 hours 3 minutes | 1 day |
| wp_scheduled_auto_draft | 2026-03-15 18:50:37 | 7 hours 33 minutes | 1 day |
+------------------------------+---------------------+-----------------------+------------+

Huomioi next_run_relative-sarake: Jos monen tehtävän kohdalla lukee now tai mennyt aika (esim. 1 hour ago), ja ne pysyvät sellaisina sivuston päivittämisestä huolimatta, WordPressin cron ei todennäköisesti toimi oikein. Yleensä syynä on katkos sivuston liikenteessä, koodivirhe lisäosassa tai estetty PHP-suoritus.

Cronien testaaminen ja suorittaminen käsin

WP-CLI sisältää sisäänrakennetun työkalun cron-järjestelmän testaamiseen. Voit tarkistaa, pystyykö sivusto laukaisemaan cron-tapahtumia:

wp cron test

Onnistunut tuloste: Success: WP-Cron spawning is working as expected.

Voit myös kokeilla suorittaa kaikki odottavat tehtävät manuaalisesti. Tämä on hyödyllistä vianmäärityksessä, jos haluat nähdä jääkö jokin tehtävä jumiin:

wp cron event run --due-now

Tai laukaista vain yhden tietyn tapahtuman kerrallaan sen hook-nimen avulla:

wp cron event run wp_update_plugins

Jos komento suoritetaan eikä virheitä näy heti terminaalissa tai lokitiedostossa /data/log/php-error.log, kyseinen funktio on todennäköisesti suoritettu onnistuneesti.

WP-Cronin siirtäminen järjestelmän Croniin

Koska normaali WP-Cron käynnistyy vain, kun sivustolla vieraillaan, sillä on kaksi mahdollista ongelmaa:

  1. Vähäliikenteisillä sivustoilla ajastetut tehtävät (kuten klo 8:00 julkaistavaksi ajastettu uutinen) voivat viivästyä, jos kukaan ei vieraile sivustolla kyseiseen aikaan.

  2. Erittäin raskailla sivustoilla (esim. WooCommerce-kaupat) suuret cron-ajot voivat hidastaa sivun latautumista kävijöille.

Näissä tapauksissa on suositeltavaa kytkeä sivuston vierailijapohjainen cron pois päältä ja korvata se palvelintason järjestelmäcronilla, joka ajaa tehtävät luotettavasti taustalla.

Vaihe 1: Kytke vierailijapohjainen cron pois päältä

Lisää seuraava vakio projektisi wp-config.php-tiedostoon (tai .env-tiedostoon, jos sivustosi käyttää sitä):

define( 'DISABLE_WP_CRON', true );

Tämän jälkeen vierailijat eivät enää laukaise taustatehtäviä.

Vaihe 2: Lisää ajoitus järjestelmän crontabiin

Aseta palvelin ajamaan WP-CLI-komento säännöllisesti lisäämällä uusi sääntö palvelimen crontab-tiedostoon komennolla crontab -e:

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

Tämä sääntö suorittaa odottavat cron-tehtävät luotettavasti kerran minuutissa ja kirjaa mahdolliset virhetulosteet suoraan sivuston lokihakemistoon /data/log/wp-cron.log.

Huomio curl- ja wget-komennoista: Monissa vanhoissa WordPress-oppaissa neuvotaan lisäämään järjestelmän croniin komento, joka kutsuu tiedostoa curl https://esimerkki.fi/wp-cron.php. Tätä tapaa ei suositella Seravon ympäristössä. Se kuluttaa turhaan nginx-palvelimen HTTP-työprosesseja, kun taas suora wp cron event run -komento suorittaa tehtävät tehokkaammin suoraan PHP-FPM-tasolla.

Aikavyöhykkeet ja ajan käsittely

Kun kehität aikakriittisiä ajoituksia, on tärkeää ymmärtää palvelimen ja WordPressin välinen ero ajan käsittelyssä:

  1. Palvelimen aika: Seravon palvelimien laitteistokellot ovat aina UTC-ajassa, ja käyttöjärjestelmän aikavyöhyke (date) on asetettu palvelinklusterin sijainnin mukaisesti (esim. Suomen aikaan).

  2. WordPressin aika: WordPress nollaa suorituksen yhteydessä aina PHP:n aikavyöhykkeen takaisin UTC-aikaan.

Tämän vuoksi WordPressin sisällä (esim. lisäosien koodissa tai cron-koukuissa) kellonaika on aina UTC-ajassa. Kun haluat tulostaa tai käsitellä aikaa sivuston paikallisella aikavyöhykkeellä, käytä aina WordPressin omia aikafunktioita, kuten wp_date(), current_time() tai the_time().

Esimerkki ajan tulostumisesta samalla palvelimella:

# Käyttöjärjestelmän aika (esim. Suomen aika)
date -R
Fri, 22 Mar 2026 10:00:00 +0200

# WordPress-ympäristön sisäinen aika (pakotettu UTC)
wp eval "echo date('r');"
Fri, 22 Mar 2026 08:00:00 +0000

Yleisimmät virhetilanteet

  • wp cron test ilmoittaa virheestä (The DISABLE_WP_CRON constant is set to true): Tämä ilmoitus on normaali, jos vierailijapohjainen WP-Cron on kytketty pois päältä ja korvattu järjestelmätason cronilla. Varmista tällöin komennolla crontab -l, että tausta-ajo (wp cron event run --due-now) on määritetty palvelimen ajastimeen.

  • Tehtävät jäävät roikkumaan (now tai mennyt aika next_run_relative-sarakkeessa): Yleisin syy on yksittäisen lisäosan cron-koukussa tapahtuva PHP-virhe tai sivustolle asetettu HTTP-salasanasuojaus (Basic Auth), joka estää WordPressin sisäiset HTTP-pyynnöt. Testaa suoritus käsin komennolla wp cron event run --due-now ja tarkista virheilmoitukset lokista /data/log/php-error.log.

  • Ajastettujen artikkelien julkaisu ei toimi ajallaan: Vähäliikenteisillä sivustoilla vierailijapohjaista WP-Cronia ei välttämättä ajeta täsmälleen julkaisuhetkellä. Siirrä cron järjestelmätasolle yllä olevan ohjeen mukaisesti, jolloin tehtävät ajetaan luotettavasti kerran minuutissa.

  • Hitaat sivulataukset tai korkea kuormitus: Raskaat taustatehtävät (esim. WooCommercen Action Scheduler) voivat ruuhkauttaa PHP-FPM-prosesseja, jos ne ajetaan kävijöiden sivulatausten yhteydessä. Siirrä ajot järjestelmän croniin ja tutustu tarvittaessa Action Schedulerin optimointiohjeeseen.

Katso myös

Oikein toimiva WordPress Cron huolehtii sivuston taustatehtävistä, päivityksistä ja ajastetuista julkaisuista luotettavasti ilman erillistä ylläpitoa. Mikäli ajastettujen tehtävien vianmäärityksessä tai järjestelmätason crontab-määrityksissä ilmenee ongelmia, asiakaspalvelumme auttaa osoitteessa [email protected].

Vastasiko tämä kysymykseesi?