WordPressin ajastettujen tehtävien virheenkorjaus kokonaisuutena
WordPressin ajastetut tehtävät, eli WP-Cron, ovat yksi niistä järjestelmän osista, jotka toimivat pitkään huomaamatta – kunnes eivät enää toimi. Kun varmuuskopiot jäävät ajamatta, tuotteiden hinnat eivät päivity, sähköpostit eivät lähde tai julkaisut viivästyvät, syy löytyy usein cronista. Ongelma on, että WP-Cron ei yleensä kaadu näyttävästi. Se vain lakkaa tekemästä töitään.
Virheenkorjaus vaatii ymmärrystä siitä, mitä WP-Cron oikeasti on, mitä se ei ole ja missä kohtaa se tyypillisesti hajoaa.
Mitä WP-Cron oikeasti on
WP-Cron ei ole oikea cron
Ensimmäinen ja tärkein asia: WP-Cron ei ole käyttöjärjestelmän ajastin. Se ei pyöri taustalla kellon mukaan. WP-Cron laukeaa vain, kun joku tekee HTTP-pyynnön WordPress-sivustolle.
Tämä tarkoittaa:
-
jos sivustolla ei ole liikennettä, tehtävät eivät aja
-
jos liikenne on epäsäännöllistä, ajastus on epätarkka
-
jos pyynnöt eivät pääse perille, cron ei koskaan käynnisty
Moni “mystinen” cron-ongelma johtuu tästä perusmallista.
Miten WP-Cron käynnistyy
Kun WordPress vastaanottaa pyynnön, se tarkistaa:
-
onko ajastettuja tehtäviä erääntynyt
-
onko cron jo käynnissä
-
voiko cronin käynnistää
Jos ehdot täyttyvät, WordPress tekee erillisen HTTP-kutsun itseensä ja ajaa ajastetut tehtävät taustalla.
Jos tämä sisäinen HTTP-kutsu epäonnistuu, cron ei aja.
Tyypillisimmät oireet cron-ongelmista
WP-Cronin ongelmat näkyvät harvoin suoraan virheilmoituksina. Yleisiä oireita ovat:
-
ajoitetut julkaisut eivät ilmesty
-
WooCommerce-tehtävät jäävät roikkumaan
-
sähköpostit lähtevät viiveellä tai eivät lainkaan
-
välimuistit eivät tyhjene ajallaan
-
integraatiot eivät päivity
Jos useampi näistä tapahtuu yhtä aikaa, cron on todennäköinen syyllinen.
Ensimmäinen askel: onko WP-Cron kokonaan rikki
Tarkista ajastetut tehtävät
Ensimmäinen virheenkorjausaskel on selvittää, näkeekö WordPress tehtäviä lainkaan. Jos tehtävälista on tyhjä tai vanhentuneita tehtäviä kertyy, cron ei toimi normaalisti.
Jos tehtävät kasaantuvat “missed” tai “overdue” -tilaan, WordPress ei saa niitä ajettua.
Ajoitusten kellonaika ja palvelinaika
Yllättävän yleinen ongelma on aikavyöhyke. WordPressin:
-
sivuston aikavyöhyke
-
PHP:n aikavyöhyke
-
palvelimen järjestelmäaika
täytyy olla linjassa. Jos ne eivät ole, tehtävät voivat näyttää olevan tulevaisuudessa tai menneisyydessä, eikä niitä ajeta koskaan.
Sisäinen HTTP-kutsu: yleisin rikkoutumispiste
Miksi cron ei käynnisty
WP-Cron käyttää sisäistä HTTP-kutsua, joka voi epäonnistua monesta syystä:
-
palomuuri estää loopback-kutsut
-
Cloudflare tai reverse proxy blokkaa pyynnön
-
SSL-konfiguraatio on rikki
-
DNS osoittaa väärin
Kun tämä tapahtuu, WordPress ei välttämättä kerro siitä mitään näkyvästi.
Miten tämä näkyy käytännössä
Tyypillinen oire on, että:
-
cron toimii joskus
-
cron ei toimi kuormassa
-
cron ei toimi ollenkaan tietyssä ympäristössä
Ilman lokitusta tämä näyttää satunnaiselta käytökseltä.
Debuggaus: miten nähdä mitä oikeasti tapahtuu
Lokitus on pakollinen
Ilman lokitusta cronin virheenkorjaus on arvailua. Tarvitaan näkyvyys:
-
PHP error logiin
-
WordPressin debug-logiin
-
mahdollisesti web-palvelimen lokiin
Moni cron-virhe on PHP warning tai fatal error, joka ei näy selaimessa.
Cron-tehtävän sisältö ratkaisee
Kaikki cron-tehtävät eivät ole samanarvoisia. Virheenkorjauksessa on selvitettävä:
-
mikä funktio ajetaan
-
kuinka kauan se kestää
-
käyttääkö se ulkoisia rajapintoja
-
voiko se kaatua yksinään
Yksi rikkoutunut tehtävä voi estää koko cron-ajon.
Yleinen ongelma: liian raskaat tehtävät
WP-Cron ei ole taustatyöjärjestelmä
WP-Cron ajetaan HTTP-pyynnön elinkaaren aikana. Jos tehtävä:
-
kestää kauan
-
käyttää paljon muistia
-
tekee useita ulkoisia kutsuja
se voi katketa kesken ilman selkeää virhettä.
Tämä on erityisen yleistä:
-
massapäivityksissä
-
raporttigeneroinnissa
-
suurissa synkronoinneissa
Oire: tehtävä ei koskaan “valmistu”
Tehtävä näyttää ajautuvan uudelleen ja uudelleen, mutta lopputulos ei koskaan päivity. Tämä on klassinen merkki siitä, että tehtävä ylittää ympäristön rajat.
Päällekkäiset ja jumittuneet cron-ajot
Cron-lock ei vapautu
WordPress käyttää lukitusmekanismia estääkseen useita yhtäaikaisia cron-ajot. Jos cron kaatuu väärässä kohdassa, lukko voi jäädä päälle.
Tällöin:
-
uudet cron-ajot eivät käynnisty
-
tehtävät kasaantuvat
-
sivusto näyttää muuten toimivan
Tämä on hiljainen ja vaarallinen vikatila.
Miten tämä havaitaan
Jos cron ei käynnisty edes manuaalisesti ja tehtävät eivät liiku, lukitus on todennäköinen syy.
WP-Cron vs oikea järjestelmäcron
Milloin WP-Cron ei riitä
WP-Cron toimii hyvin:
-
pienissä ja keskisuurissa sivustoissa
-
kevyissä tehtävissä
-
ympäristöissä, joissa on jatkuvaa liikennettä
Se ei ole hyvä ratkaisu:
-
liikennepiikeissä
-
raskaissa taustatöissä
-
liikenteettömissä sivustoissa
Oikea cron ratkaisee monta ongelmaa
Yleinen ja suositeltu malli on:
-
poistaa WP-Cron automaattinen käynnistys
-
ajaa cron oikealla järjestelmäcronilla säännöllisesti
Tällöin:
-
ajoitus on tarkka
-
tehtävät eivät riipu liikenteestä
-
debuggaus helpottuu
Tämä muuttaa WP-Cronin luotettavaksi ajomekanismiksi.
WooCommerce ja cron-ongelmat
WooCommerce käyttää cron-tehtäviä aggressiivisesti:
-
tilausten käsittely
-
varaston päivitykset
-
raportointi
-
webhookit
Jos cron ei toimi, WooCommerce-oireet näkyvät nopeasti. Usein juuri WooCommerce paljastaa piilevät cron-ongelmat.
Reverse proxy ja CDN -ympäristöt
Cloudflare, Varnish ja Nginx voivat vaikuttaa cronin toimintaan:
-
loopback-kutsut estyvät
-
cache palauttaa väärän vastauksen
-
HTTP-pyynnöt eivät koskaan saavuta WordPressiä
Virheenkorjauksessa on varmistettava, että cronin käyttämä endpoint:
-
ei ole cachettu
-
ei vaadi autentikointia
-
ei ohjaudu väärin
Milloin cron-virheenkorjaus on onnistunut
Virheenkorjaus on onnistunut, kun:
-
tehtävät ajautuvat ajallaan
-
vanhentuneita tehtäviä ei kasaannu
-
raskaat tehtävät on pilkottu tai siirretty taustalle
-
cron ei ole riippuvainen satunnaisesta liikenteestä
Hyvä merkki on se, että cron ei enää vaadi huomiota.
Lopuksi: cron on näkymätön mutta kriittinen
WP-Cron ei ole näyttävä osa WordPressiä, mutta se on yksi kriittisimmistä. Kun se toimii, kukaan ei huomaa sitä. Kun se ei toimi, oireet leviävät kaikkialle.
Virheenkorjaus ei ole yhden asetuksen korjaamista. Se on ymmärrystä:
-
ajomallista
-
ympäristöstä
-
tehtävien luonteesta
Kun nämä ovat kunnossa, WordPressin ajastetut tehtävät muuttuvat epäluotettavasta mysteeristä ennustettavaksi osaksi järjestelmää.
