Kapitola 15 · 15.1
CRON úlohy: automatické spúšťanie úloh
Pozrite si to v krátkom videu
Cron úloha (alebo cronjob) je príkaz, ktorý server za vás spúšťa v presne stanovených časoch. Napríklad každú noc skript, ktorý vyčistí staré údaje, každú hodinu prepojenie s vaším účtovníctvom, alebo naplánované úlohy WordPressu či Laravelu. Nastavíte to v časti CRON úlohy, pod Pokročilé funkcie.

Pravidlá vo WebOké
Server zdieľate s ďalšími webovými stránkami. Preto platia pre cron úlohy určité pravidlá:
- Nechajte úlohu spúšťať sa najviac raz za 10 minút. To žiadame od všetkých. Server to síce nevynucuje, ale úloha, ktorá sa spúšťa častejšie, spomaľuje server pre vás aj pre ostatných. Ak máte viacero úloh, nenechajte ich spúšťať sa všetky v rovnakom okamihu.
- Udržujte úlohu krátku. Ak treba spracovať veľa, rozdeľte prácu do viacerých kôl.
Vytvorenie úlohy
- V DirectAdmin kliknite pod Pokročilé funkcie na CRON úlohy.
- Kliknite na PRIDAŤ CRON ÚLOHU.
- Vyplňte polia Minúta, Hodina, Deň mesiaci, Mesiac a Deň týždni, aby ste určili, kedy sa má úloha spustiť (1). Hviezdička * znamená "každý".
- Pod časovými poliami uvidíte pri položke Cron úloha sa spustí: (2) zrozumiteľné vysvetlenie, kedy sa úloha spustí. Skontrolujte to.
- Do poľa Príkaz (3) zadajte, čo sa má vykonať, s úplnými cestami (pozrite nižšie).
- Nechcete dostávať e-mail po každom spustení? Kliknite na ZABRÁNIŤ E-MAILOM (4).
- Kliknite na VYTVORIŤ (5).

Úloha sa potom zobrazí v zozname. Ak ju chcete odstrániť, začiarknite ju (1) a kliknite na Odstrániť.

Príklady časov
| Minúta | Hodina | Deň mesiaci | Mesiac | Deň týždni | Význam |
|---|---|---|---|---|---|
| 30 | 3 | * | * | * | Každý deň o 03:30 |
| */10 | * | * | * | * | Každých 10 minút |
| 0 | * | * | * | * | Každú celú hodinu |
| 15 | 8 | * | * | 1-5 | V pracovné dni o 08:15 (1 je pondelok, 0 alebo 7 je nedeľa) |
| 0 | 2 | 1 | * | * | Prvý deň každého mesiaca o 02:00 |
Hodnoty môžete oddeliť čiarkami (1,15,30), rozsah určiť pomlčkou (5-7) a interval pomocou */ (*/2 znamená každý druhý). Zvoľte radšej pokojný, náhodný čas, napríklad 03:17 namiesto presnej polnoci.
Príkaz: úplné cesty
Cron úloha nevie, v ktorom priečinku má začať. Preto vždy používajte úplné cesty. Váš balík sa na serveri nachádza v /home/ nasledovanom vaším DA používateľským menom (pozrite Nájdenie názvu servera a používateľského mena DA).
Spustenie PHP skriptu:
/usr/local/bin/php /home/pouzivatelskemeno/domains/vasadomena.sk/public_html/uloha.php
Tým sa použije rovnaká verzia PHP ako pre vašu webovú stránku, teda verzia nastavená v Select PHP version (pozrite Voľba verzie PHP (Select PHP version)).
Volanie webovej adresy (napríklad ak vám softvér poskytne cron URL):
curl --silent https://www.vasadomena.sk/cron.php > /dev/null
WordPress: WordPress štandardne spúšťa svoje naplánované úlohy pri návšteve. Pri vyťaženej stránke alebo stránke s málo návštevníkmi je lepšie využiť cron úlohu. Do wp-config.php vložte define('DISABLE_WP_CRON', true); a vytvorte úlohu, ktorá každých 15 minút spustí /usr/local/bin/php /home/pouzivatelskemeno/domains/vasadomena.sk/public_html/wp-cron.php.
Laravel: /usr/local/bin/php /home/pouzivatelskemeno/domains/vasadomena.sk/artisan schedule:run. Upozornenie: schedule:run vykoná iba úlohy, ktoré pripadajú presne na okamih spustenia cronu. Ak sa cron spúšťa každých 10 minút, úloha naplánovaná na 08:05 sa nikdy nespustí.
E-mail po každej úlohe
Ak úloha vytvorí výstup (text alebo chybové hlásenie), server ho môže odoslať e-mailom. To sa stane iba v prípade, že ste zadali adresu. Máte tri možnosti:
- E-mail na vlastnú adresu: kliknite na POŠLITE VŠETOK VÝSTUP CRON NA E-MAIL, zadajte e-mailovú adresu a kliknite na ULOŽIŤ. Toto platí pre všetky vaše úlohy. Ak pole necháte prázdne, e-mail sa neodošle.
- Bez e-mailu pre jednu úlohu: pri vytváraní kliknite na ZABRÁNIŤ E-MAILOM. Za váš príkaz sa pridá >/dev/null 2>&1 a výstup danej úlohy sa zahodí, aj keď máte adresu nastavenú.
- Výstup do log súboru: pridajte za príkaz >> /home/pouzivatelskemeno/cron-log.txt 2>&1. Neskôr si v Web FTP môžete pozrieť, čo úloha vykonala. Takýto súbor občas vyčistite.

Tip: Zadajte adresu, kým testujete novú úlohu. Tak hneď uvidíte, či funguje. Potom ju vypnite alebo presmerujte výstup do log súboru. E-maily z cron úloh sa počítajú do limitu na odosielanie vášho balíka (pozrite Verzendlimieten en de melding 'message limit reached').
Často kladené otázky
Moja úloha vracia chybu "Could not open input file".
Cesta k skriptu nie je správna. Skontrolujte úplnú cestu vo Web FTP: mala by začínať /home/pouzivatelskemeno/domains/.
Môj skript funguje v prehliadači, ale nie ako cron úloha.
Skript spustený cez cron nevie, pod ktorou webovou stránkou beží: $_SERVER['SERVER_NAME'] a $_SERVER['DOCUMENT_ROOT'] sú prázdne a relatívne cesty v include fungujú inak. V skripte používajte úplné cesty, alebo skript volajte pomocou curl s webovou adresou.
Môžem zistiť, kedy sa úloha spustila?
DirectAdmin si to za vás neeviduje. Preto nechajte úlohu zapisovať výstup do log súboru vrátane dátumu (napríklad date >> /home/pouzivatelskemeno/cron-log.txt ako prvý príkaz, oddelené ;).
Čo robí Spustite pri @reboot?
Vtedy sa úloha spustí iba pri reštarte servera, nie v pravidelných časoch. To pri webovej stránke takmer nikdy nepotrebujete.
