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 Limity pro odesílání pošty a hlášení '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.
