Egy weboldal mögött sok ismétlődő feladat fut: hírlevelek kiküldése, ütemezett bejegyzések megjelenése, webáruházi készletszinkron, ideiglenes fájlok törlése, mentések, jelentések. Ezeket nem kell kézzel indítani: a cron a Linux szerverek időzítője, amely a megadott időpontokban automatikusan lefuttat egy parancsot vagy szkriptet. A cPanel tárhelyeken a Cron Jobs menüpontban grafikus felületen állíthatod be.
Ebben az útmutatóban elmagyarázzuk, hogyan működik a cron és hogyan olvasd az időzítést, lépésről lépésre létrehozunk egy feladatot cPanelben, gyakorlati parancspéldákat adunk, megmutatjuk, hogyan váltsd ki a WordPress beépített időzítőjét, és összeszedjük a gyakori hibákat.
Mire jó a cron?
- WordPress: ütemezett bejegyzések, bővítmények feladatai, WooCommerce műveletek (lásd lent a wp-cron kiváltását).
- Webáruház: készlet- és árszinkron a beszállítóval, termékfeed generálása, elhagyott kosár e-mailek.
- Karbantartás: naplók és ideiglenes fájlok törlése, adatbázis-tisztítás, gyorsítótár-ürítés.
- Mentés: adatbázis-mentés egy fájlba, amelyet utána letölthetsz vagy továbbküldhetsz.
- Jelentések és értesítések: napi összesítők, figyelmeztetések.
- Keretrendszerek ütemezői: a Laravel, a Symfony és sok más keretrendszer egyetlen, percenként futó cron bejegyzésre építi a saját ütemezőjét.
A cron időzítés olvasása
Egy cron bejegyzés öt időmezőből és egy parancsból áll:
* * * * * parancs
│ │ │ │ └── a hét napja (0–7, a vasárnap 0 vagy 7)
│ │ │ └───── hónap (1–12)
│ │ └──────── a hónap napja (1–31)
│ └─────────── óra (0–23)
└────────────── perc (0–59)
*= minden érték*/15= minden 15. (például 15 percenként)1,15= felsorolás1-5= tartomány (például hétfőtől péntekig)
| Időzítés | Jelentése |
|---|---|
*/15 * * * * |
15 percenként |
0 * * * * |
Minden óra elején |
30 2 * * * |
Minden nap 2:30-kor |
0 6 * * 1-5 |
Hétköznap reggel 6-kor |
0 3 * * 0 |
Vasárnap hajnali 3-kor |
0 0 1 * * |
Minden hónap első napján éjfélkor |
Az időpontok a szerver időzónája szerint értendők. A szintaxisról részletesebben a crontab szintaxisát bemutató cikk ír; ha bizonytalan vagy, a crontab.guru oldalon egy időzítést beírva szövegesen is megnézheted, mit jelent.
Cron job létrehozása cPanelben
- Lépj be a cPanelbe, és az Advanced (Haladó) csoportban nyisd meg a Cron Jobs menüpontot.
- E-mail cím (Cron Email): add meg, hová küldje a rendszer a feladatok kimenetét. Hasznos a beállításnál, utána érdemes elnémítani (lásd lent).
- Add New Cron Job: a Common Settings legördülő listából választhatsz kész időzítést (például „Once Per Day”), vagy kézzel kitöltheted az öt mezőt.
- Command: add meg a futtatandó parancsot (lásd a példákat).
- Kattints az Add New Cron Job gombra. A feladat az alsó listában jelenik meg, ahol később szerkesztheted vagy törölheted.
A lépéseket képekkel a cron job cPanelben való létrehozásáról szóló cikk is bemutatja.
Parancspéldák
PHP szkript futtatása (ez a legjobb módszer, mert közvetlenül, a webszerver megkerülésével fut):
/usr/local/bin/php /home/felhasznalonev/public_html/scripts/feladat.php
A felhasznalonev helyére a cPanel felhasználóneved kerül, a pontos útvonalat a Fájlkezelőben láthatod. Az aWh cPanel tárhelyein a /usr/local/bin/php a fiókodhoz a Select PHP Version menüpontban beállított PHP-verziót futtatja.
Egy URL meghívása (ha a feladatot egy weboldal-cím indítja, és nem érhető el közvetlenül fájlként):
curl -s https://cegnev.hu/cron-feladat > /dev/null 2>&1
vagy wget -q -O /dev/null https://cegnev.hu/cron-feladat. Ez lassabb és kevésbé megbízható, mint a közvetlen PHP futtatás, mert a webszerveren és annak időkorlátain keresztül megy.
WP-CLI parancs (ha a csomag tartalmazza az SSH-t és a WP-CLI-t):
cd /home/felhasznalonev/public_html && wp cron event run --due-now > /dev/null 2>&1
Laravel ütemező:
cd /home/felhasznalonev/projekt && /usr/local/bin/php artisan schedule:run > /dev/null 2>&1
A WordPress wp-cron kiváltása
A WordPress nem a szerver cronját használja, hanem egy saját, „álcron” rendszert: minden oldalbetöltéskor megnézi, van-e esedékes feladat, és ha igen, elindítja. Ennek két hátránya van: kis forgalmú oldalon a feladatok késnek (ha senki nem látogatja az oldalt, nem futnak le), nagy forgalmú oldalon pedig felesleges terhelést és lassulást okoz.
A megoldás: kapcsold ki a beépített időzítőt, és futtasd a szerver cronjából.
-
A
wp-config.phpfájlba, a „That’s all, stop editing!” sor elé írd be:define( 'DISABLE_WP_CRON', true ); -
Hozz létre egy cron jobot cPanelben, például 5 vagy 15 percenkénti futással:
/usr/local/bin/php /home/felhasznalonev/public_html/wp-cron.php > /dev/null 2>&1
Webáruházaknál (WooCommerce) az 5 perces gyakoriság jó kiindulás, egyszerű blogoknál a 15 perces is elég. A részletes lépéseket a WP-Cron cPanel cron jobra cseréléséről szóló cikk írja le.
A kimenet kezelése
Alapesetben a cron minden futás kimenetét elküldi a megadott e-mail címre. A beállításnál ez hasznos, de egy 5 percenként futó feladatnál naponta 288 levelet jelentene. Ha a feladat már jól működik, a parancs végére írd:
> /dev/null 2>&1
Ha szeretnéd megőrizni a kimenetet, írd fájlba (>> /home/felhasznalonev/logs/cron.log 2>&1), és időnként ürítsd a naplót, hogy ne teljen be a tárhely.
Hibaelhárítás: ha nem fut le a feladat
- Rossz útvonal: a cron nem a
public_htmlmappában indul, ezért mindig teljes, abszolút útvonalat adj meg a szkripthez (és ha a szkript relatív útvonalakat használ, előttecd-vel lépj a mappájába). - Rossz PHP: ha a parancs csak
php, lehet, hogy nem a várt verziót futtatja; használd a teljes útvonalat. - Jogosultság: a szkript legyen olvasható a felhasználód számára; ha közvetlenül futtatható fájlt (shell szkriptet) indítasz, legyen futtatási joga is.
- Időzítés: ellenőrizd, hogy az öt mező jó sorrendben van-e, és a szerver időzónájában gondolkodtál-e.
- A szkript maga hibás: futtasd le kézzel SSH-ból vagy a böngészőből, és nézd meg a hibaüzenetet; ideiglenesen kapcsold vissza a kimenet e-mailes küldését.
- Erőforrás-limit: megosztott tárhelyen a cron is a fiók CPU- és memória-limitjein belül fut. Egy nehéz, hosszan futó feladat elérheti a limitet, vagy lassíthatja a weboldalt; arról, hogyan számít bele a cron és az SSH az erőforrás-limitekbe, tudásbázis cikkünk ír.
Jó gyakorlatok
- Ne futtass mindent percenként. Gondold végig, milyen gyakran kell valóban lefutnia a feladatnak; a túl sűrű futás a fiók erőforrásait terheli.
- Szórd szét az időpontokat: ne induljon minden feladat egész órakor, válassz például 2:17-et.
- Hosszú feladatoknál gondoskodj róla, hogy ne induljon el újra, amíg az előző fut (például egy zárolófájllal vagy a
flockparanccsal). - Ne tegyél jelszót a parancsba vagy az URL-be; a titkokat a szkript konfigurációs fájljában, a webgyökéren kívül tárold.
- Védd az URL-ről indítható feladatokat egy titkos kulccsal vagy IP-korlátozással, hogy kívülről ne lehessen tetszés szerint meghívni őket.
Összefoglalás
A cron a weboldalak ismétlődő feladatainak megbízható időzítője. cPanelben a Cron Jobs menüpontban néhány kattintással beállítható; a parancsokban mindig teljes útvonalat használj, a működő feladatok kimenetét némítsd el, WordPressnél pedig váltsd ki a beépített wp-cront a szerver cronjával. Az aWh cPanel tárhelyein a cron jobok minden csomagban elérhetők.
Gyakori kérdések
Milyen gyakran futtathatok cron jobot?
A cron legkisebb egysége egy perc. Megosztott tárhelyen viszont csak akkor futtass percenként feladatot, ha valóban szükséges; a legtöbb feladathoz az 5–15 perces vagy óránkénti gyakoriság elég.
Honnan tudom, hogy lefutott a feladat?
Ideiglenesen hagyd bekapcsolva az e-mailes értesítést, vagy írd a kimenetet egy naplófájlba, és nézd meg a Fájlkezelőben.
Mi a különbség a php és a wget/curl parancs között?
A php parancs közvetlenül, a webszerver megkerülésével futtatja a szkriptet: gyorsabb, és nem vonatkoznak rá a webes időkorlátok. A wget és a curl egy weboldal-címet hív meg, mintha egy látogató nyitná meg; akkor használd, ha a feladat csak URL-en keresztül indítható.
Milyen PHP útvonalat használjak?
Az aWh cPanel tárhelyein a /usr/local/bin/php útvonalat; ez a fiókodhoz beállított PHP-verziót futtatja.
Lassíthatja a weboldalt a cron?
Igen, ha egy nehéz feladat gyakran fut, mert a weboldallal közös erőforrásokat használja. Ütemezd a nehéz feladatokat alacsony forgalmú időszakra, és ne futtasd őket feleslegesen sűrűn.
Kell cron a WordPresshez?
Nem kötelező, a WordPress beépített időzítővel is működik. Nagyobb forgalmú oldalon és webáruháznál viszont érdemes kiváltani a szerver cronjával, mert megbízhatóbb és kevésbé terheli az oldalt.