Pokud pracujete s Linuxem, dříve či později budete potřebovat, aby systém dělal věci za vás, aniž byste museli být u klávesnice: noční zálohy , čištění dočasných souborů, generování reportů nebo synchronizaci dat . Pro to všechno je stále králem starý přítel unixových systémů: cron.
I když se to na první pohled může zdát trochu skličující, cron a jeho soubor crontab jsou mnohem jednodušší, než se zdají. S několika jasnými koncepty můžete naplánovat výkonné a flexibilní automatizované úlohy , a to jak pro uživatele, tak na úrovni systému. V následujících řádcích uvidíte, jak cron funguje, jak konfigurovat crontab, jaké detaily sledovat (systémový čas, oprávnění, PATH atd.), typické chyby, dopad na výkon, alternativy a mnoho dalšího.
Co je cron a proč je v Linuxu tak důležitý?
V unixových systémech je cron démon, který běží na pozadí od okamžiku spuštění systému . Jeho úkol je velmi jednoduchý: každou minutu kontroluje, zda existují nějaké naplánované úlohy, a pokud ano, provede je. Nic víc, nic míň.
Aby to fungovalo, je nezbytné, aby systém měl správné datum, čas a časové pásmo . Pokud hodiny běží rychle, pomalu nebo jsou ve špatném časovém pásmu, vašim cron úlohám dojde čas. Stav systémového času můžete zkontrolovat pomocí:
timedatectl
Tento příkaz vám ukáže, zda jsou hodiny synchronizované, které časové pásmo se používá a zda je aktivní NTP server. Pokud zjistíte, že časové pásmo je nesprávné, můžete ho změnit například na Evropa/Madrid pomocí:
timedatectl set-timezone Europe/Madrid
Linuxové distribuce obvykle obsahují NTP servery již nakonfigurované pro synchronizaci hodin. Pokud potřebujete tyto upravit nebo přidat další, můžete tak učinit prostřednictvím služby NTP a jejího konfiguračního souboru, například /etc/ntp.conf , v závislosti na distribuci a konkrétním NTP démonu.
V závislosti na distribuci se služba cron spouští z cest, jako například /etc/rc.d/ nebo /etc/init.d , ačkoli v dnešní době je téměř vždy spravována systemd. Démon každou minutu kontroluje soubory, jako například /etc/crontab , /var/spool/cron nebo soubory v /etc/cron.d , aby zjistil, zda existují nějaké čekající úlohy ke spuštění.
Crontab: tabulka úloh cron
Srdcem plánování cronu je soubor crontab, tabulka úloh, kde jsou definovány příkazy a jejich plány . Každý uživatel může mít svůj vlastní crontab, takže k automatizaci osobních úloh nejsou vyžadována oprávnění root.
Pro práci s uživatelským crontabem používáte samotný příkaz `crontab` . S jeho pomocí můžete vytvářet, upravovat, zobrazovat nebo mazat naplánované úlohy, aniž byste museli přímo upravovat systémové soubory.
Základní jednořádková syntaxe v crontabu
Každý řádek crontabu odpovídá cron úloze a sleduje tento vzorec pěti polí časového razítka a příkazu:
minuto hora día_del_mes mes día_de_la_semana comando
Každé pole může nabývat specifických hodnot nebo speciálních znaků. Obvyklé rozsahy jsou následující a je důležité jim porozumět, protože tvoří jádro programování:
- Minuta: hodnoty od 0 do 59.
- Hora: hodnoty od 0 do 23.
- Den v měsíci: hodnoty od 1 do 31.
- Měsíc: hodnoty od 1 do 12 nebo zkrácené názvy měsíců v některých systémech.
- Všední den: hodnoty od 0 do 7, kde 0 a 7 obvykle představují neděli; lze použít i zkrácené anglické názvy (mon, tue…).
Po těchto pěti polích následuje příkaz ke spuštění , který může být cokoli od systémového binárního souboru až po shellový skript, Python, PHP atd. Můžete tam napsat to, co byste napsali v terminálu, s ohledem na omezené prostředí, ve kterém cron běží.
Speciální znaky ve výrazech cronu
Aby se předešlo zběsilému psaní spousty řádků, cron podporuje několik modifikátorů a speciálních znaků , které programování dávají mnohem větší výkon:
- *Dvojtečka (:) znamená „všechny hodnoty“ v daném poli. Například * v poli měsíc znamená všechny měsíce.
- ,: odděluje seznam hodnot. Například 1,15 v daném dni v měsíci spustí úlohu 1. a 15. dne v měsíci.
- -Znak : označuje souvislý rozsah. Například 1–5 v daném dni v týdnu odpovídá období od pondělí do pátku.
- /: se používá jako krok nebo interval, obvykle vedle * (například */10 v minutách znamená každých 10 minut).
- rozsahy s výjimkouKombinací rozsahů, seznamů a kroků můžete vytvářet složitá pravidla, například spuštění úlohy v rozsahu minut s výjimkou konkrétního kroku.
Navíc je v souborech crontab velmi běžné používat symbol hash (#) k psaní komentářů . Jakýkoli řádek začínající znakem # bude cronem ignorován, ale je užitečný pro zanechání vysvětlujících poznámek k tomu, co každá úloha dělá.
Speciální zprávy od @yearly, @daily a společnosti
V běžných případech umožňuje cron použít zkrácená klíčová slova , která nahrazují pět časových polí. To výrazně usnadňuje čtení souboru:
- @restartovat: provede příkaz jednou při každém spuštění systému.
- @roční o @každoročně: ekvivalent k „0 0 1 1 *“, spouští se jednou ročně.
- @měsíční: rovno „0 0 1 * *“, provádí se první den každého měsíce o půlnoci.
- @týdně: ekvivalent „0 0 * * 0“, spouští se jednou týdně.
- @denně y @půlnoc: oba jsou „0 0 * * *“, každý den v 00:00.
- @hodinově: odpovídá „0 * * * *“, první minutě každé hodiny.
Tyto řetězce jsou velmi praktické, ale je důležité si uvědomit, že vám neumožňují zvolit jiný konkrétní čas než výchozí . Například pokud chcete, aby se něco spouštělo každý den ve 13:00, budete muset použít standardní číselný formát („0 13 * * *“) místo @daily.
Jak vytvořit a upravit uživatelský crontab?
Správný způsob správy úloh uživatele je pomocí příkazu `crontab -e` . Tím se otevře crontab aktuálního uživatele ve výchozím editoru (nano, vim atd.), takže můžete přidávat nebo upravovat položky.
Při prvním použití se vás systém obvykle zeptá, který editor chcete použít . Od té doby se pokaždé, když spustíte příkaz `crontab -e`, otevře stejný editor s aktuálním obsahem souboru, včetně komentářů k nápovědě vygenerovaných distribucí.
Jakmile jsou úlohy přidány a soubor uložen, démon cron automaticky znovu načte novou konfiguraci ; není třeba službu restartovat. Chcete-li zkontrolovat, co máte naplánováno, můžete zobrazit svůj crontab pomocí:
crontab -l
Pokud chcete kdykoli úplně vyprázdnit crontab , můžete tak učinit pomocí:
crontab -r
Existuje také varianta crontab -r -i , která se před smazáním zeptá na potvrzení, což je velmi doporučené, aby se zabránilo nechtěnému smazání všech nakonfigurovaných úloh.
Praktický příklad: vytvoření skriptu a jeho naplánování pomocí cronu
Abychom to všechno viděli v akci, můžeme si připravit ukázkový skript a nechat ho automaticky spustit v cronu. Představte si, že si ve svém domovském adresáři vytvoříte soubor s názvem consulta.sh pomocí krátkého příkazu:
nano consulta.sh
Dovnitř byste mohli dát něco jako:
#!/bin/bash
# script de ejemplo
sudo ls -l / > archivoResultado.txt
Tento malý skript vypíše obsah kořenového adresáře a zapíše ho do textového souboru s názvem archivoResultado.txt. Aby cron bez problémů běžel, je nezbytné mu udělit oprávnění ke spuštění:
chmod ugo+x consulta.sh
Nyní je čas ho přidat do crontabu. Spusťte:
crontab -e
A přidáte například řádek, aby se spouštěl každý den v 19:00:
00 19 * * * usuario /ruta/completa/consulta.sh
V tomto řádku pole označují minutu 0, hodinu 19, libovolný den v měsíci, libovolný měsíc, libovolný den v týdnu . Dále je zadán uživatel (v případě systémového crontabu) a poté cesta ke skriptu. Další typické příklady by mohly být:
- Každou neděli v 19:00:
00 19 * * 0 usuario /ruta/consulta.sh - Každý rok 4. února v 19:00:
00 19 4 2 * usuario /ruta/consulta.sh
Možnosti příkazu crontab pro správu úloh

Binární soubor crontab se nepoužívá pouze pro editaci, ale také pro správu souborů jiných uživatelů nebo načítání souborů z určitých cest . Nejčastěji používané možnosti jsou:
crontab archivo: nahradí aktuální crontab uživatele obsahem zadaného souboru.crontab -e: otevře crontab aktuálního uživatele ve výchozím editoru.crontab -l: zobrazí na obrazovce všechny úlohy aktuálně nakonfigurované pro daného uživatele.crontab -r: smaže celý crontab uživatele (bez potvrzení, pokud není použito -i).crontab -c dir: umožňuje definovat adresář, kam budou uloženy soubory crontab, za předpokladu, že k tomu existují oprávnění.crontab -u usuariospravuje crontab jiného uživatele (vyžaduje oprávnění root).
Můžete také použít příkaz ` crontab -h` pro zobrazení rychlé nápovědy, která podrobně popisuje všechny dostupné příznaky.
Prostředí a proměnné při spuštění cronu
Jednou z věcí, která často způsobuje problémy, je, že cron nespouští příkazy ve stejném prostředí jako vaše interaktivní relace . Jinými slovy, nenačítá vaše soubory .bashrc nebo .profile, pokud to nevynutíte. Ve výchozím nastavení definuje několik proměnných, jako například:
- HOME: domovský adresář uživatele, který spouští crontab.
- NÁZEV PROTOKOLU y USERuživatelské jméno.
- SHELL: shell používaný k interpretaci příkazů, obvykle
/bin/sh. - PATHzákladní binární vyhledávací cesta, často poněkud omezená, např.
/usr/bin:/bin.
Pokud se v cestě PATH spoléháte na příkazy, které cron nenajde, narazíte na tiché chyby. Proto se důrazně doporučuje používat ve skriptech absolutní cesty (například /usr/bin/python místo pouze python) nebo předefinovat cestu PATH přímo v crontabu.
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Použitý shell můžete také změnit a v případě potřeby zahrnout načtení souboru .bashrc úpravou začátku crontabu takto:
SHELL=/bin/bash
. $HOME/.bashrc
Co se týče výstupu, jelikož se jedná o příkazy shellu, můžete přesměrovat STDOUT a STDERR stejně jako v terminálu . Například, chcete-li zabránit úloze v generování e-mailů nebo protokolů:
* * * * * comando > /dev/null 2>&1
Nebo shromažďovat výstup v souboru protokolu specifickém pro daný úkol, což je velmi užitečné pro ladění a auditování:
*/10 * * * * /ruta/script.sh >> /var/log/mis_cron.log 2>&1
Řízení přístupu k cronu: cron.allow a cron.deny
Mnoho systémů řídí, kdo může plánovat úlohy, pomocí souborů /etc/cron.allow a /etc/cron.deny . Tyto soubory se používají k omezení nebo udělení přístupu k příkazu crontab.
Logika je jednoduchá: pokud existuje `cron.allow` , mohou cron používat pouze uživatelé uvedení v něm; pokud existuje pouze `cron.deny` , jsou autorizováni všichni kromě uvedených. Pokud jsou přítomni oba a uživatel se objeví v obou, má `cron.allow` přednost , takže tento uživatel bude moci používat crontab.
Například můžete zablokovat všechny uživatele a poté povolit přístup pouze konkrétnímu uživateli pomocí něčeho jako:
echo ALL | sudo tee -a /etc/cron.deny
echo ishmael | sudo tee -a /etc/cron.allow
I s oprávněními sudo, pokud je uživatel zablokován podle těchto souborů, nebude moci upravovat svůj vlastní crontab ani crontab jiných uživatelů a obdrží zprávu s oznámením, že program crontab nemůže používat.
Typy crontabu: systémový a uživatelský
Typický server má dvě úrovně konfigurace: systémový crontab a osobní uživatelské crontaby . Oba používají podobnou syntaxi, ale jsou uloženy a spravovány odlišně.
- Systémový crontab (UNIX/Linux): se obvykle nachází v
/etc/crontaba v souborech pod/etc/cron.dPro úpravy vyžaduje oprávnění root a obvykle se používá pro kritické služby, úlohy globální údržby, rotaci protokolů atd. Řádky zde obsahují další pole s uživatelem, pod kterým se příkaz provádí. - Uživatelský crontabKaždý účet může mít jeden, přístupný pomocí crontab -e. Jsou uloženy v adresářích jako například / var / cívka / cron o /var/spool/cron/crontabs v závislosti na distribuci. Nejsou upravovány přímo; modifikují se pomocí příkazu crontab a jsou spouštěny s oprávněními uživatele, který je vytvořil.
Díky této dualitě může každý uživatel automatizovat své obvyklé úkoly izolovaně , zatímco administrátor udržuje globální plán pro systém.
Protokoly a výstupy úloh cron
Když se s naplánovanou úlohou něco pokazí, je důležité vědět, kde hledat. V závislosti na konfiguraci systému se výstup cronu může ukládat do syslogu, vyhrazeného souboru nebo do lokální fronty pošty.
V mnoha distribucích je aktivita démona cron zaznamenávána do souborů jako /var/log/cron nebo /var/log/syslog . Tam uvidíte, které příkazy jsou provedeny, kdy a zda dojde k nějakým základním chybám. Je to poněkud hlučný protokol, protože mísí systémové události, ale pomocí nástrojů jako grep můžete snadno filtrovat položky související s cronem.
Při instalaci MTA (agent pro přenos pošty), jako například Postfix nebo SendmailVe výchozím nastavení cron odesílá výstup každé úlohy (stdout a stderr) do lokální poštovní schránky uživatele, který ji spustil. Tato fronta se obvykle nachází v /var/spool/mail/usuarioMůžete si to přečíst pomocí nástrojů jako mailx pomocí příkazu mail.
Pokud chcete chování přizpůsobit, můžete definovat proměnnou prostředí MAILTO na začátku crontabu. Například:
MAILTO="[email protected]"
Díky tomu bude veškerý výstup z úloh v daném crontabu odeslán na tuto adresu, za předpokladu, že je server správně nakonfigurován pro odesílání externích e-mailů. Pokud použijete prázdné pole MAILTO (MAILTO=""), cron veškerý výstup zahodí a nebude generovat žádné e-maily.
Vliv cronu na výkon systému
Přestože cron sám o sobě spotřebovává jen velmi málo zdrojů, jeho zneužití může vést k přetížení CPU, nasycení disku nebo zahlcení sítě . V konečném důsledku vše závisí na tom, kolik úloh naplánujete a jak často.
Pokud naplánujete velký počet úloh náročných na zdroje na stejnou dobu, může systém zaznamenat výrazné zpomalení: vysoké využití CPU a RAM, soupeření o diskovou paměť nebo problémy s šířkou pásma, pokud se jedná o velké přenosy. Navíc více simultánních úloh přistupujících ke stejným souborům nebo databázím může způsobit konflikty a zpomalení.
Při úlohách náročných na síť – například synchronizaci vzdálených záloh , volání API nebo hromadné stahování – si můžete také všimnout zvýšení odezvy ping a celkové latence , zejména v prostředích s omezenou šířkou pásma.
Osvědčené postupy pro minimalizaci dopadu
Abyste mohli využít cron bez zbytečného zatěžování počítače, vyplatí se dodržovat několik velmi jednoduchých strategií :
- Rozdělujte úkoly do různorodých časů, zejména ty náročné, a vyhýbejte se tak špičkám pro uživatele nebo služby.
- Používejte nástroje jako pěkný Chcete-li snížit prioritu CPU některých dlouhodobě běžících úloh:
0 3 * * * nice -n 19 /ruta/script.sh - Využijte utility, jako je např. CPUlimit Pokud potřebujete omezit procento využití CPU, které může proces spuštěný cronem využít.
- Kombinujte cron s stádo nebo jiné blokovací mechanismy, které zabraňují současnému spuštění stejného skriptu (velmi užitečné při úlohách zálohování nebo údržby).
Je také velmi zajímavé použít cron ke zlepšení výkonu samotného systému : pravidelné čištění mezipaměti a dočasných souborů, zavírání neaktivních aplikací, monitorování využití CPU, RAM a disku v protokolech za účelem detekce úzkých míst atd.
Časté chyby při plánování s cronem a jak se jim vyhnout
Každý, kdo s cron úlohami pracuje už nějakou dobu, ví, že existuje řada typických chyb, které se často opakují . Jejich sledování vám ušetří mnoho hodin pokusů a omylů.
Jeden z nejčastějších problémů se týká omezené cesty PATH v prostředí cron . Příkazy jako git, python nebo php nemusí být nalezeny, pokud nezadáte úplnou cestu nebo pokud neupravíte cestu PATH na začátku crontabu. Řešení je jednoduché: použijte absolutní cesty nebo explicitně předefinujte cestu PATH.
Další častou chybou je zapomenutí oprávnění ke spuštění skriptu . Pokud soubor není spustitelný nebo k němu uživatel cron nemá oprávnění, úloha se nikdy nespustí. Je dobré to zkontrolovat pomocí `ls -ly` a v případě potřeby použít `chmod +x /cesta/k/script.sh`.
Do hry vstupuje také otázka oprávnění . Cron spouští úlohy s oprávněními uživatele, který je nakonfiguroval; pokud potřebujete operace vyžadující root oprávnění, měli byste zvážit použití sudo ve skriptu (se všemi příslušnými bezpečnostními opatřeními) nebo přesunutí úlohy do kořenového crontabu.
A konečně, mnoho problémů pramení z nadměrného plánování (příliš mnoho častých úkolů), nedostatku užitečných protokolů nebo absence oznámení. Zavedení minimálního systému protokolů a upozornění – například pomocí externích služeb, jako je Healthchecks.io – pomáhá odhalit, kdy úloha cron přestala fungovat, dříve než je příliš pozdě.
Externí nástroje pro pohodlnější práci s cronem
Ruční zápolení se syntaxí cronu není vždy lákavé. Existuje několik online nástrojů, které generují výrazy cronu, ověřují pravidla a pomáhají ladit chyby, aniž by vyžadovaly jakoukoli instalaci na vašem počítači.
- Crontab GuruVelmi lehký online editor, který vám umožňuje napsat cron výraz a zobrazit jeho význam v prostém textu („každých 15 minut“, „v neděli ve 03:00“ atd.). Také zvýrazňuje syntaktické chyby a zobrazuje příklady a tipy.
- Generátor Cron úlohTento nástroj je navržen pro vytváření předkonfigurovaných úloh pomocí jednoduchých formulářů. Umožňuje vybrat typické intervaly, upravit je a vrátit cron řádek připravený ke kopírování.
- EasyCron: online služba, která nejen generuje výrazy, ale také provádí úlohy vzdáleně voláním URL adres podle vámi definovaného plánu. Zahrnuje ovládací panel, protokoly provádění a e-mailová upozornění v případě selhání.
- KDE Cron (KCron)Grafická aplikace integrovaná do prostředí KDE, která poskytuje vizuální rozhraní pro správu úloh cron bez použití příkazového řádku. Velmi užitečná pro ty, kteří dávají přednost klikání před úpravou souborů.
- Tvůrce CronuWebový generátor zaměřený na integraci s knihovnami jako Quartz. Umožňuje vytvářet složité výrazy bez ručního psaní, ideální pro ty, kteří pracují se systémy založenými na cronu, ale z vývojových prostředí.
Tyto nástroje jsou obzvláště užitečné, když potřebujete složité programování nebo když začínáte a chcete si před uvedením do provozu ověřit, zda jste výrazu správně porozuměli.
Alternativy k cronu a jeho použití v jiných systémech
Přestože je cron de facto standardem v Linuxu a Unixu, existují alternativy, které pokrývají případy, kdy cron selhává , a také ekvivalentní řešení v jiných operačních systémech.
V ekosystému Unix/Linux najdete nástroje jako například:
- AnakronUrčeno pro stroje, které nejsou celý den zapnuté. Pokud denní úlohu nebylo možné provést, protože zařízení bylo vypnuté, spustí se po jeho opětovném zapnutí.
- FcronPodobně jako Anacron umožňuje kombinovat úkoly podle data a přesného času, aniž by bylo nutné, aby byl počítač neustále aktivní. Na mnoha distribucích obvykle vyžaduje instalaci a kompilaci ze zdrojového kódu.
- hcronZavádí koncepty, jako jsou štítky pro klasifikaci úkolů, správu sítí nebo různých skupin uživatelů s větší flexibilitou, což přidává další zabezpečení a organizaci.
- McConkompatibilní s cronem, ale s možností předefinovat plány přetvořením úloh od výchozího boduObvykle se také instaluje samostatně a není standardně součástí většiny systémů.
Systém Windows sice nemá úlohu cron jako takovou, ale existují programy, které vykonávají velmi podobné funkce, některé z nich s velmi uživatelsky přívětivým grafickým rozhraním: WinCron, VisualCron nebo Advanced Task Scheduler jsou příklady plánovačů s mnoha možnostmi, přizpůsobených prostředí Microsoftu.
V systému macOS, ačkoli je cron stále k dispozici, Apple doporučuje používat launchd , svůj systém pro správu služeb. V launchd jsou úlohy definovány v souborech .plist (seznam vlastností) s řadou možností ovládání: automatický restart neúspěšných úloh, složité podmínky provádění, lepší integrace systému a přesné plánování pomocí StartCalendarInterval . Pro seriózní automatizaci na Macu je launchd lepší volbou než cron.
Cron v obchodním prostředí a úroveň složitosti
Ve firmě je cron mocným nástrojem pro snížení opakující se práce a minimalizaci lidských chyb . Umožňuje automatizovat zálohy pomocí rsync , plánované nasazení, generování denních nebo měsíčních reportů, synchronizaci serverů, úlohy údržby a další.
Ačkoli je samotný nástroj jednoduchý, skutečná složitost pramení z počtu a typu úloh, které nashromáždíte . Prostředí s desítkami zřetězených skriptů, vysokou frekvencí provádění a závislostmi mezi procesy může být obtížné udržovat bez dobré dokumentace a řádného monitorování.
V těchto scénářích je zásadní plánovat frekvenci úloh, aby se zabránilo spotřebě zdrojů , zajistit zabezpečení konfiguračních souborů (aby se zabránilo škodlivé manipulaci) a mít zavedený systém upozornění, který vás upozorní na selhání. Jinak by se něco tak základního, jako je denní záloha, mohlo na týdny zastavit, aniž by si toho někdo všiml.
Stručně řečeno, cron a crontab zůstávají klíčovou součástí jakéhokoli linuxového nebo unixového systému pro spolehlivou, flexibilní a relativně snadnou automatizaci úloh . Pochopením syntaxe časování, pečlivou správou prostředí pro provádění (cesta, oprávnění, proměnné), řízením dopadu na výkon a využitím protokolů, grafických nástrojů a monitorovacích služeb můžete transformovat hrstku řádků do robustní sítě automatizovaných úloh, které vám ušetří hodiny práce a udrží vaše systémy v plynulém chodu bez nutnosti každodenní pozornosti. Sdílejte tyto informace, aby se ostatní uživatelé mohli naučit spravovat automatizované úlohy pomocí crontabu v Linuxu.