Kapitola 15 · 15.1
Naplánované úlohy: automatické spouštění úloh
Podívejte se na krátké video
Naplánovaná úloha (cron nebo cronjob) je příkaz, který za Vás server spustí v pevně daných časech. Může jít například o skript, který každou noc uklidí stará data, o propojení s Vaším účetnictvím každou hodinu, nebo o naplánované úlohy WordPressu či Laravelu. Nastavíte to v části Naplánované úlohy, pod Pokročilé funkce.

Pravidla u WebOké
Server sdílíte s dalšími webovými stránkami. Proto platí pro naplánované úlohy určitá pravidla:
- Úlohu nechte spouštět nejvýše jednou za 10 minut. To žádáme od každého. Server to nijak nevynucuje, ale úloha, která se spouští častěji, zpomaluje server pro Vás i pro ostatní. Máte li více úloh, nenechávejte je spouštět všechny ve stejný okamžik.
- Úlohu udržujte krátkou. Pokud je potřeba udělat hodně práce, rozdělte ji do více kol.
Vytvoření úlohy
- V DirectAdmin klikněte pod Pokročilé funkce na Naplánované úlohy.
- Klikněte na VYTVOŘIT NAPLÁNOVANOU ÚLOHU.
- U polí Minuta, Hodina, Den měsíce, Měsíc a Den týdne vyplňte, kdy má úloha běžet (1). Hvězdička * znamená "každý".
- Pod časovými poli uvidíte u Naplánovaná úloha poběží: (2) srozumitelný popis toho, kdy úloha poběží. Zkontrolujte ho.
- U pole Příkaz (3) napište, co se má provést, s úplnými cestami (viz níže).
- Nechcete e-mail po každém spuštění? Klikněte na ZABRÁNIT E-MAILŮM (4).
- Klikněte na VYTVOŘIT (5).

Úloha se poté zobrazí v seznamu. Chcete li ji smazat, zaškrtněte ji (1) a klikněte na Smazat.

Příklady časů
| Minuta | Hodina | Den měsíce | Měsíc | Den týdne | Význam |
|---|---|---|---|---|---|
| 30 | 3 | * | * | * | Každý den ve 03:30 |
| */10 | * | * | * | * | Každých 10 minut |
| 0 | * | * | * | * | Každou celou hodinu |
| 15 | 8 | * | * | 1-5 | V pracovní dny v 08:15 (1 je pondělí, 0 nebo 7 je neděle) |
| 0 | 2 | 1 | * | * | První den každého měsíce ve 02:00 |
Hodnoty můžete oddělit čárkami (1,15,30), rozsah zadat pomlčkou (5-7) a interval pomocí */ (*/2 znamená každý druhý). Zvolte raději klidný, náhodný čas, například 03:17 místo přesně půlnoci.
Příkaz: úplné cesty
Naplánovaná úloha neví, ve které složce má začít. Proto vždy používejte úplné cesty. Váš balíček je na serveru umístěn ve složce /home/ následované Vaším uživatelským jménem DA (viz Jak najít název serveru a uživatelské jméno DA).
Spuštění PHP skriptu:
/usr/local/bin/php /home/uzivatelskejmeno/domains/vasedomena.nl/public_html/uloha.php
Tím se použije stejná verze PHP jako pro Váš web, tedy verze nastavená v Select PHP version (viz Výběr verze PHP (Select PHP version)).
Volání webové adresy (například pokud Vám software poskytuje cron URL):
curl --silent https://www.vasedomena.nl/cron.php > /dev/null
WordPress: WordPress standardně spouští své naplánované úlohy při příchodu návštěvníka. U rušného webu nebo webu s malou návštěvností je lepší to řešit naplánovanou úlohou. V takovém případě do wp-config.php vložte define('DISABLE_WP_CRON', true); a vytvořte úlohu, která každých 15 minut spustí /usr/local/bin/php /home/uzivatelskejmeno/domains/vasedomena.nl/public_html/wp-cron.php.
Laravel: /usr/local/bin/php /home/uzivatelskejmeno/domains/vasedomena.nl/artisan schedule:run. Upozornění: schedule:run spouští pouze úlohy, které přesně odpovídají okamžiku spuštění cronu. Pokud cron běží každých 10 minut, úloha naplánovaná na 08:05 se nikdy nespustí.
E-mail po každé úloze
Pokud úloha vytváří výstup (text nebo chybové hlášení), server jej může odeslat e-mailem. Stane se tak pouze pokud máte nastavenou adresu. Máte tři možnosti:
- E-mail na vlastní adresu: klikněte na ODESLAT VEŠKERÝ VÝSTUP NAPLÁNOVANÝCH ÚLOH NA E-MAIL, vyplňte e-mailovou adresu a klikněte na ULOŽIT. To platí pro všechny Vaše úlohy. Necháte li pole prázdné, e-mail se neodešle.
- Bez e-mailu pro jednu úlohu: při vytváření klikněte na ZABRÁNIT E-MAILŮM. Za Váš příkaz se tak přidá >/dev/null 2>&1 a výstup dané úlohy se zahodí, i když máte adresu nastavenou.
- Výstup do logovacího souboru: za příkaz vložte >> /home/uzivatelskejmeno/cron-log.txt 2>&1. Poté uvidíte ve Správci souborů, co úloha dělala. Takový soubor čas od času vyčistěte.

Tip: Nastavte adresu po dobu, kdy testujete novou úlohu. Hned tak uvidíte, zda funguje. Poté ji vypněte, nebo výstup přesměrujte do logovacího souboru. E-maily z naplánovaných úloh se počítají do limitu pro odesílání Vašeho balíčku (viz Verzendlimieten en de melding 'message limit reached').
Časté dotazy
Moje úloha hlásí "Could not open input file".
Cesta ke skriptu není správná. Zkontrolujte úplnou cestu ve Správci souborů: měla by začínat /home/uzivatelskejmeno/domains/.
Můj skript funguje v prohlížeči, ale ne jako naplánovaná úloha.
Skript spuštěný přes cron neví, pod jakým webem běží: $_SERVER['SERVER_NAME'] a $_SERVER['DOCUMENT_ROOT'] jsou prázdné a relativní cesty v include fungují jinak. Ve skriptu používejte úplné cesty, nebo skript volejte přes curl s webovou adresou.
Mohu zjistit, kdy úloha naposledy proběhla?
DirectAdmin to za Vás nezaznamenává. Nechte proto úlohu zapisovat výstup do logovacího souboru, včetně data (například date >> /home/uzivatelskejmeno/cron-log.txt jako první příkaz, oddělený pomocí ;).
Co dělá volba Spustit při @reboot?
Úloha se poté spustí pouze při restartu serveru, nikoli v pevně daných časech. To u webové stránky potřebujete jen velmi zřídka.
