WordPress cronVsaka spletna stran zahteva izvajanje rednih opravil v ozadju, na katera obiskovalci niti ne pomislijo. Od samodejne objave vnaprej pripravljenih prispevkov do ustvarjanja varnostnih kopij in posodabljanja vtičnikov – vse to mora sistem narediti pravočasno. Za ta namen računalniški sistemi običajno uporabljajo časovnike, ki točno ob določeni uri sprožijo izbrano akcijo.

V svetu platforme WordPress to vlogo prevzema vgrajen sistem, ki se imenuje WP-Cron. Ne gre za klasičen sistemski časovnik, ampak za PHP skripto (wp-cron.php), ki skrbi za načrtovana opravila neposredno znotraj same aplikacije. Njegovo delovanje je specifično in je tesno povezano s tem, kako ljudje dostopajo do spletne strani.

Razlika med pravim sistemskim in WordPress cronom

Pravi sistemski cron deluje na ravni operacijskega sistema strežnika. To pomeni, da se bo določena naloga izvedla točno na minuto natančno, popolnoma neodvisno od tega, ali spletno stran tisti trenutek kdo pregleduje ali ne. Je izjemno zanesljiv in ne obremenjuje same spletne aplikacije.

WordPress cron pa na drugi strani deluje reaktivno, saj ga sproži izključno spletni promet. Ko nekdo obišče katerokoli podstran na spletni strani, se skripta wp-cron.php prebudi, preveri bazo podatkov in pogleda, ali obstaja kakšno zamujeno opravilo. Če ugotovi, da je prišel čas za akcijo, jo bo sistem izvedel med samim nalaganjem strani.

Zakaj WordPress sploh uporablja takšen pristop?

Razvijalci WordPressa so želeli ustvariti sistem, ki bo deloval takoj in povsod. Ker ta platforma gostuje na tisočih različnih strežniških okoljih, od najcenejših deljenih gostovanj do naprednih sistemov, nimajo vsi uporabniki možnosti ali znanja za urejanje nastavitev pravega strežniškega crona.

WP-Cron

Vgrajeni WP-Cron je bil zato ustvarjen kot univerzalna rešitev, ki zagotavlja delovanje osnovnih funkcij kar takoj po namestitvi. Čeprav to tehnično ni najbolj optimalna pot, pa večini navadnih uporabnikov omogoča, da načrtovanje objav in avtomatizacija delujeta brez vsakršnega dodatnega programiranja ali nastavljanja strežnika.

Težave, ki nastanejo ob pomanjkanju prometa

Glavna hiba tega vgrajenega sistema se najhitreje pokaže pri povsem novih ali manjših spletnih straneh, ki nimajo stalnega obiska. Ker se WP-Cron sproži le ob obisku strani, se lahko hitro zgodi, da načrtovana opravila preprosto obvisijo v zraku in čakajo na prvega obiskovalca.

Če ste na primer nastavili objavo pomembnega članka za osmo uro zjutraj, na stran pa do poldneva ni kliknil nihče, bo vaš članek objavljen šele ob dvanajstih. Pri nalogah, kot so dnevne varnostne kopije ali pošiljanje e-novic, je takšna časovna nepredvidljivost lahko precej neprijetna in neprofesionalna.

Preobremenitev ob velikem številu obiskovalcev

Zanimivo je, da imajo zelo obiskane spletne strani ravno obraten problem. Ko na stran hkrati pride na tisoče obiskovalcev, se skripta wp-cron.php poskuša zagnati ob skoraj vsakem kliku. Sistem nenehno sprašuje bazo podatkov, ali mora kaj storiti, čeprav je opravila morda preveril že pred nekaj sekundami.

Preobremenitev strežnika

To nenehno preverjanje porabi ogromno strežniških virov, predvsem procesorske moči in delovnega spomina. Zaradi prevelikega števila zalednih poizvedb se lahko spletna stran začne nalagati bistveno počasneje, ob izjemnih konicah prometa pa lahko takšno ravnanje celo povzroči nedosegljivost strežnika.

Kako vzpostaviti zanesljivejšo rešitev?

Dobra praksa pri vseh resnejših in rastočih spletnih projektih je, da privzeto obnašanje WP-Crona povsem izklopite. To najlažje storite tako, da v glavno nastavitveno datoteko wp-config.php dodate vrstico kode:

  • define(‘DISABLE_WP_CRON’, true);

S tem preprečite, da bi obiskovalci sprožali obremenjujoča zaledna opravila.

Ko je ta funkcija znotraj WordPressa izklopljena, pa morate naloge prevzeti na nivoju samega strežnika. V nadzorni plošči svojega gostovanja preprosto ustvarite pravi sistemski “cron job”, ki bo na vsakih 15 ali 30 minut v ozadju samodejno obiskal datoteko wp-cron.php. Tako bodo vsa opravila izvedena točno ob pravem času in popolnoma brez vpliva na hitrost spletne strani.