Cron je počítačový program, ktorý možno použiť na to, aby počítač vykonával úlohy v určitých časových intervaloch. Používa sa v operačných systémoch UNIX a v operačných systémoch podobných UNIXu, ako je napríklad Linux.

Cron možno použiť na plánovanie väčšiny opakujúcich sa úloh. Často sa používa na automatizáciu úloh súvisiacich s údržbou alebo správou počítača alebo počítačovej siete, hoci sa dá použiť aj na mnohé iné úlohy, ako je sťahovanie súborov z internetu a sťahovanie e-mailov v konkrétnych časoch alebo termínoch.

Názov počítačového programu cron pochádza zo slova cron, ktoré je odvodené od gréckeho slova pre čas, χρόνος (chronos).

Cron sa nastavuje úpravou súboru s názvom crontab (tabuľka cron). V tomto súbore sú uvedené konkrétne úlohy, ktoré sa majú v počítači spustiť, a čas, kedy sa majú spustiť.

Ako cron funguje a kde sú crontaby

Cron beží ako démon na pozadí a pravidelne kontroluje crontab záznamy. Existujú systémové crontaby (napr. /etc/crontab, zložka /etc/cron.d/) a používateľské crontaby (obvykle v /var/spool/cron/crontabs/ alebo spravované príkazom crontab). Systémový súbor /etc/crontab má často navyše jednu kolónku pre používateľa, ktorý sa má príkaz spustiť.

Formát záznamu v crontabe

Základný riadok v crontabe má päť časových polí a potom príkaz, ktorý sa spustí:

minúta hodina deň-mesiaca mesiac deň-týždňa príkaz

Hodnoty môžu byť čísla, rozsahy, zoznamy alebo krokové hodnoty:

  • minúta: 0–59
  • hodina: 0–23
  • deň-mesiaca: 1–31
  • mesiac: 1–12 (alebo skratky ako Jan, Feb ... podľa implementácie)
  • deň-týždňa: 0–7 (0 a 7 zvyčajne znamenajú nedeľa) alebo skratky Mon, Tue ...

Príklady zápisov v poliach:

  • */5 — každých 5 minút
  • 1-5 — od 1. do 5. minúty/hodiny/...
  • 0,15,30,45 — vymenované hodnoty

Bežné príklady

# každý deň o 02:30 30 2 * * * /usr/local/bin/backup.sh  # každých 5 minút */5 * * * * /usr/bin/php /home/user/script.php >> /var/log/script.log 2>&1  # každé pondelok o polnoci 0 0 * * 1 /home/user/weekly-task.sh 

Cron tiež podporuje tzv. "špeciálne" reťazce, ktoré zjednodušujú plánovanie:

  • @reboot — spustiť pri štarte systému
  • @hourly, @daily, @weekly, @monthly, @yearly

Správa crontabu

  • crontab -e — upraviť crontab používateľa v prednastavenom editore.
  • crontab -l — zobraziť aktuálny crontab používateľa.
  • crontab -r — odstrániť crontab používateľa.
  • Systémové crontaby sa spravujú úpravou súborov v /etc/ a pomocou konfigurácie balíka cronu (závisí od distribúcie).

Dôležité tipy a odporúčania

  • Používajte absolútne cesty k príkazom a súborom (napr. /usr/bin/python3), pretože crontab má obmedzené prostredie PATH.
  • V crontabe môžete nastaviť premenné prostredia, napríklad MAILTO, PATH, SHELL. Napríklad:
    MAILTO="[email protected]" PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
  • Presmerovanie výstupu je dôležité, aby ste zachytili chyby a nezahltili e-mailové hlásenia: > /var/log/task.log 2>&1.
  • Testujte príkaz priamo v shelli pred vložením do crontabu.
  • Ak potrebuje skript bežať len raz, zvážte použitie systémového plánovača alebo cron vstupu s @reboot a kontrolou záznamu vykonania.
  • Anacron je doplnok vhodný pre notebooky alebo počítače, ktoré nie sú zapnuté 24/7 — zabezpečí spustenie úloh, ktoré vynechal cron počas vypnutia systému.
  • Všímajte si časové pásma a letný čas — cron používa systémové nastavenie času. Ak potrebujete iné správanie, môžete explicitne nastaviť TZ v crontabe alebo volať príkazy s konverziou času.

Diagnostika a logy

Výkon cron úloh môžete sledovať cez systémové logy. Namiesto jednotného umiestnenia sa logy môžu nachádzať v rôznych súboroch podľa distribúcie:

  • /var/log/cron (niektoré systémy)
  • /var/log/syslog (Debian/Ubuntu, hľadajte správy od cron)
  • journalctl -u cron.service alebo journalctl -u crond.service pri systéme s systemd

Bezpečnosť a práva

Cron spúšťa úlohy s právami používateľa, ktorého crontab upravujete. Systémové crontaby môžu spúšťať úlohy ako root — buďte preto opatrní pri umiestňovaní skriptov a pri oprávneniach. Uistite sa, že skripty neobsahujú zraniteľné miesta a že sú správne zabezpečené proti zneužitiu.

Zhrnutie

Cron je jednoduchý, ale veľmi výkonný nástroj na plánovanie a automatizáciu opakujúcich sa úloh v systémoch UNIX a Linux. Správne nastavený crontab ušetrí čas a zníži manuálnu prácu, pričom je dôležité rozumieť formátu záznamov, prostrediu, v ktorom úlohy bežia, a vedieť diagnostikovať prípadné problémy v logoch. Pri práci s cronem používajte absolútne cesty, presmerovanie výstupu a zvážte použitie anacronu pre stroje, ktoré nebývajú nepretržite zapnuté.