# Cron (Slovenský)

Cron je plánovač úloh pre GNU/Linux a mnoho iných operačných systémov. Umožňuje automaticky opakovať úlohy spúšťaním daných príkazov v daný čas. Môže byť využitý pre široký rozsah aplikácii, od jednoduchých opakujúcich sa úloh až po zálohy systému.

## Inštalácia

Existuje mnoho implementácií cron-u, ktoré sú prístupné a môžete si z nich vybrať. dcronAUR (Dillon's Cron) je dostupný v [core] repozitáry a je inštalovaný ako súčasť base skupiny balíčkov.

    # pacman -S dcron

Poprípade si môžete nainštalovať fcron z [community] alebo bcronAUR[broken link: archived in aur-mirror] alebo vixie-cronAUR z AUR; všetky poskytujú široký rozsah funkcií a možností konfigurácie.

Na Gentoo Linux Cron Guide nájdete viacej porovnaní medzi spomenutými implementáciami.

## Úvodná konfigurácia

#### Používatelia a autoštart

Cron môže pre väčšinu užívateľov pracovať "out-of-box". Ak chcete používať crontab, používatelia musia byť členom určenej skupiny, ale v Arch-u je táto skupina users, ktorej členom by mali byť všetci používatelia. Ak by z nejakých dôvodov užívatelia neboli členmi danej skupiny, môžeme ich pridať nasledujúcim príkazom:

    # gpasswd -a username users

a mali by bať schopný editácie svojich vlastných crontab-ov.

Aby ste sa uistili, že cron sa bude spúšťať pri štarte systému, pridajte crond do riadku DAEMONS v `/etc/rc.conf`.

#### Chyby úloh

Počas spúšťania daných úloh sa môžu vyskytnúť chyby. Keď sa to stane, cron zaregistruje stderr výstup úlohy a znaží sa ho poslať defaultne cez sendmail. Na log-ovanie týchto správ môžete použiť prepínač -M pre cornd a napísať si svoj vlastný skript alebo nainštalovať základný SMTP subsystém

    # pacman -S esmtp procmail

Po inštalácii si vytvorte súbor `/etc/esmtprc` s týmto obsahom:

     mda "/usr/bin/procmail -d %T"

Otestujte pomocou:

    $ sendmail user_name < message.txt
    $ cat /var/spool/mail/user_name

Všetky chybové výstupy budú presmerované do `/var/spool/mail/$user_name` Thats all! All error output of jobs now will be redirected to `/var/spool/mail/$user_name`

## Formát zápisu do crontab

Základný formát je:

    <minute> <hour> <day_of_month> <month> <day_of_week> <command>

- minute nadobúda hodnoty od 0 do 59.
- hour nadobúda hodnoty od 0 do 23.
- day_of_month nadpbúda hodnoty od 1 do 31.
- month nadobúda hodnoty od 1 do 12.
- day_of_week nadobúda hodnoty od 0 do 6, kde 0 je nedeľa.

Viac časom môže byť určených pomocou pomocou čiarky, rozsah (od-do) môže byť určený pomocou pomlčky a hviezdička je použitá ako zástupný znak. Medzery sa používajú na oddelenie jednotlivých polí. Napríklad

    *0,*5 9-16 * 1-5,9-12 1-5 /home/user/bin/i_love_cron.sh

spustí skript `i_love_cron.sh` v 5 minútových intervaloch od 9 do 16 každý pracovný deň v mesiaci okrem letných mesiacov (Jún, Júl, August)

## Základné príkazy

Crontab nemôže byť nikdy editovaný priamo. Používatelia by mali použiť program crontab na prácu s ich crontabmi.

Na zobrazenie crontab-ov, môžete použiť:

    $ crontab -l

Na editovanie:

    $ crontab -e

Na zmazanie:

    $ crontab -d

Ak máte uložený crontab a chcete si prepísať svoj starý crontab:

    $ crontab uložený_crontab

na prepísanie crontab-u z príkazového riadku (Wikipedia:stdin):

    $ crontab -

Na editovanie cudzieho crontab-u, spustite ako root:

    # crontab -u username -e

Tento formát funguje aj na mazanie a pridávanie crontabov.

## Príklady

    01 * * * * /bin/echo Hello, world!

spustí `/bin/echo Hello, world!` vždy prvú minútu každej hodiny, každý deň a každý meisac (12:01, 13:01, 14:01 ...)

Podobne

    */5 * * jan mon-fri /bin/echo Hello, world!

spustí ten istý príkaz každých 5 minút každý pracovný deň v Januári (12:00, 12:05, 12:10 ...)

    *0,*5 9-16 * 1-5,9-12 1-5 /home/user/bin/i_love_cron.sh

spustí skript `i_love_cron.sh` v 5 minútových intervaloch od 9 do 16 každý pracovný deň v mesiaci okrem letných mesiacov (Jún, Júl, August)

## Viac informácií

Cron daemon využíva konfiguračný súbor známy ako crontab. Každý používateľ v systéme môže používať oddelený crontab na plánovanie svojich individuálnych úloh. ROOT-ov crontab je používaný na plánovanie úloh system-wide.

Medzi formátmi pre crontab jednotlivých daemonov sú rozdiely. Defaul root crontab pre dcron vyzerá asi takto:

    /var/spool/cron/root

    # root crontab
    # DO NOT EDIT THIS FILE MANUALLY! USE crontab -e INSTEAD

    # man 1 crontab for acceptable formats:
    #    <minute> <hour> <day> <month> <dow> <tags and command>
    #    <@freq> <tags and command>

    # SYSTEM DAILY/WEEKLY/... FOLDERS
    @hourly         ID=sys-hourly   /usr/sbin/run-cron /etc/cron.hourly
    @daily          ID=sys-daily    /usr/sbin/run-cron /etc/cron.daily
    @weekly         ID=sys-weekly   /usr/sbin/run-cron /etc/cron.weekly
    @monthly        ID=sys-monthly  /usr/sbin/run-cron /etc/cron.monthly

Tieto riadky vysvetľujú jeden z možných formátov crontabu, kde:

1. @perióda
2. ID=meno úlohy
3. príkaz

Ďaľším štandartným formátom je:

1. minute
2. hour
3. day
4. month
5. day of week
6. command

Súbory pre crontab sú zvyčajne uložené v `/var/spool/cron/username`. Napríklad crontab pre root nájdeme v `/var/spool/cron/root`.

Pre viac informácií si pozrite crontab man page, dcron man page http://www.jimpryor.net/linux/dcron tu] a tu a príspevky na fóre.

## Beh X aplikácií

Ak by ste chceli spustiť X aplikáciu pomocou cronu, tak pred príkaz vložte:

    export DISPLAY=:0.0 ;

To nastaví premennú DISPLAY na prvý displej, čo je zvyčajne správne, pokiaľ Vám nebeží viac xserverov.

Ak to stále nejde, potom potrebujete použiť xhost aby ste získali kontrolu nad X11:

    # xhost +si:localuser:$(whoami)

Môžete si daný príkaz pridať do ponuky Aplikácie spúšťané pri štarte ako:

    bash -c "xhost +si:localuser:$(whoami)"

## Asynchrónne spracovanie úloh

Ak ste vypli počítač, ale chcete, aby sa úloha potom spustila môžete použiť jedno z týchto riešení:

Dcron
  Vanilla dcron teraz podporuej asynchrónne spracovanie úloh. Stačí keď vložíte @hourly, @daily, @weekly alebo @monthy s menom úlohy asi takto:

    @hourly         ID=greatest_ever_job      echo This job is very usefull.

Cronwhip (AUR, fórum)
  Skript na automatické spustenie zmeškaných úloh cronu, pracuje s default dcron-om.
Anacron (AUR)
  Plná náhrada za dcron, úlohy spracováva asynchrónne.

## Zdroje

- Gentoo Linux Cron Guide

Category:

- Slovenský

Hidden category:

- Pages with broken package links