WP Cron – dobrý sluha, ale zlý pán

379
WP Cron - dobrý sluha, ale zlý pán

Slovo “cron” už zrejme počul každý čitateľ tohto článku. V IT oblasti sa tento názov ustálil pre nejaký systémový plánovač, ktorý v preddefinovaných časoch spúšťa s určitou periodicitou (napr. každých 5 minút, každú párnu hodinu…) rôzne naplánované úlohy, napr. zálohovanie, defragramentáciu disku, zasielanie mailových reportov atď.

Podobný plánovač je integrovaný aj v každej inštalácii WordPress pod názvom WP-Cron. Zabezpečuje automatické spúšťanie rôznych úloh potrebných či už pre samotný WordPress, alebo nainštalované pluginy.

Kontrola, či je v danom čase potrebné spustiť nejakú úlohu a následne ju prípadne vykonať, sa vykonáva pri každom jednom otvorení vašej web stránky, pri každom kliknutí na jej ďalšiu podstránku.

A práve toto je kameňom úrazu WP-Cron. Že prečo? Z dvoch dôvodov:

1. Web má malú návštevnosť

Predstavte si web s veľmi malou, takmer žiadnou návštevnosťou. V plugine na zálohovanie máte nastavené, že o 2:00 hod. sa má spustiť zálohovanie stránky. V tom čase ale na web nikto nepríde, takže zálohovanie sa nespustí. Je možné, že za tým sú naplánované ďalšie a ďalšie úlohy, ale ani tie sa z dôvodu chýbajúcej návštevnosti nespustia. A tak čakajú vo fronte, kým si niekto danú stránku neotvorí, aby sa mohli následne spustiť.

Prvý ďalší návštevník príde na stránku ale až napr. o 7:00. V tej chvíli sa začnú vykonávať všetky zmeškané úlohy a tento návštevník len čaká, a čaká, a stránka sa nie a nie zobraziť… “Zlízol” si to, že je na stránke prvým návštevníkom po dlhej dobe a tak sa na pozadí popri otváraní stránky vykonávajú aj všetky naplánované úlohy, ktoré sa v ich naplánovanom čase nespustili, čo môže načítanie stránky značne spomaliť.

Takéto odloženie úloh môže ale okrem spomalenia stránky spôsobiť aj ďalší problém. Čo ak danú úlohu bolo nutné spustiť presne v stanovenom čase, lebo sú na nej závislé ďalšie úlohy? Nespustením tejto prvej úlohy sa následne ako domino zrútia všetky ostatné, za ňou nasledujúce, s ňou súvisiace úlohy.

Malá návštevnosť stránky teda spôsobí to, že úlohy nie sú spúšťané v presne stanovenom čase, ale až pri prvej nasledujúcej návšteve webu.

2. Web má veľkú návštevnosť

V tomto prípade problém s tým, že by sa úlohy nespúšťali v stanovenom čase odpadá. Web má totiž počas celého dňa dostatočnú návštevnosť, takže plánované úlohy sa priebežne stíhajú vykonať.

Problémom však je to, že ako som už písal vyššie, pri každom kliknutí na stránke sa kontroluje zoznam plánovaných úloh a následne sa tieto vykonávajú. Toto sa teda deje podstatne častejšie, ako je nevyhnutné, čo môže mať za následok spomalenie celého webu. Zvlášť je to problém pri weboch s veľmi veľkou návštevnosťou, kde každé malé spomalenie pri otvorení jednej stránky môže mať za následok vyťaženie celého webového servera, ktorý tak môže prestať reagovať a stránka sa vďaka tomu stane pre jej návštevníkov nedostupnou.

Ako teda z tohto začarovaného kruhu von?

Ako je vidno, kontrola a spúšťanie plánovaných úloh pri návšteve stránky nie je za žiadnych okolností dobrá. Bez ohľadu na množstvo jej návštevníkov to nie je “to pravé orechové”, čo by sme chceli.

Našťastie to je možné veľmi ľahko vyriešiť. WP-Cron stačí vo WordPress zakázať, teda nastaviť tak, aby sa plánované úlohy nekontrolovali pri každom kliku na stránke. Toto spravíme editáciou konfiguračného súboru wp-config.php, do ktorého pridáme záznam:

define(‘DISABLE_WP_CRON’, true);

Následne jeho spúšťanie nadefinujeme v systémových cronoch priamo na hostingu tak, aby sa napr. pravidelne každú minútu spúštal na stránke súbor www.nazovdomeny.sk/wp-cron.php Presný postup ako to spraviť sa líši v závislosti od použitého hostingu, v každej spoločnosti sa to nastavuje ináč.

Týmto nastavením tak zabezpečíme, že WP-Cron sa bude spúšťať pravidelne každú minútu bez ohľadu na návštevnosť webu. Zároveň sa tak za danú minútu spustí len raz, nie pri každom kliknutí, čo môže najmä na vyťažených weboch serveru značne pomôcť, čo vaši návštevníci isto ocenia, keďže stránka sa im bude zobrazovať rýchlejšie.

Dobrý článok? Chceš dostávať ďalšie?

Už viac ako 6 200 ITečkárov dostáva správy e-mailom. Nemusíš sa báť, nie každé ráno. Len občasne.

Súhlasím so spracovaním mojich osobných údajov. ( Viac informácií. )

Tvoj email neposkytneme 3tím stranám. Posielame naňho len informácie z robime.it. Kedykoľvek sa môžeš odhlásiť.