UNPKG

arch-wiki-md-repo

Version:

All arch-wiki articles in markdown format, updated every two days.

262 lines (157 loc) 8.1 kB
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. ## Contents * [1 Inštalácia](#In.C5.A1tal.C3.A1cia) * [2 Úvodná konfigurácia](#.C3.9Avodn.C3.A1_konfigur.C3.A1cia) * [2.1 Používatelia a autoštart](#Pou.C5.BE.C3.ADvatelia_a_auto.C5.A1tart) * [2.2 Chyby úloh](#Chyby_.C3.BAloh) * [3 Formát zápisu do crontab](#Form.C3.A1t_z.C3.A1pisu_do_crontab) * [4 Základné príkazy](#Z.C3.A1kladn.C3.A9_pr.C3.ADkazy) * [5 Príklady](#Pr.C3.ADklady) * [6 Viac informácií](#Viac_inform.C3.A1ci.C3.AD) * [7 Beh X aplikácií](#Beh_X_aplik.C3.A1ci.C3.AD) * [8 Asynchrónne spracovanie úloh](#Asynchr.C3.B3nne_spracovanie_.C3.BAloh) * [9 Zdroje](#Zdroje) ## Inštalácia Existuje mnoho implementácií cron-u, ktoré sú prístupné a môžete si z nich vybrať. [dcron](https://aur.archlinux.org/packages/dcron/) (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](https://www.archlinux.org/packages/?name=fcron) z [community] alebo [bcron](https://aur.archlinux.org/packages/bcron/) alebo [vixie-cron](https://aur.archlinux.org/packages/vixie-cron/) z [AUR](/index.php/AUR "AUR"); všetky poskytujú široký rozsah funkcií a možností konfigurácie. Na [Gentoo Linux Cron Guide](http://www.gentoo.org/doc/en/cron-guide.xml) 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](https://en.wikipedia.org/wiki/stdin "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](/index.php/Man_page "Man page"), dcron man page [http://www.jimpryor.net/linux/dcron](http://www.jimpryor.net/linux/dcron) tu] a [tu](https://bbs.archlinux.org/viewtopic.php?id=78654&p=1) 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](https://aur.archlinux.org/packages.php?ID=21079), [fórum](https://bbs.archlinux.org/viewtopic.php?id=57973)) Skript na automatické spustenie zmeškaných úloh cronu, pracuje s default dcron-om. Anacron ([AUR](https://aur.archlinux.org/packages.php?ID=5196)) Plná náhrada za dcron, úlohy spracováva asynchrónne. ## Zdroje * [Gentoo Linux Cron Guide](https://wiki.gentoo.org/wiki/Cron)