Cron je démon, který umožňuje spouštět programy a skripty v nastavenou dobu. Může vám spustit zálohu dat, nebo třeba měnit tapetu na pracovní ploše podle denní doby. Informací je o něm na internetu spousta, ale shrnu to, co jsem zatím potřeboval sám.
Cron využívá konfiguračních souborů crontab, které se definují pro každého uživatele zvlášť, a ty kontroluje každou minutu - nejkratší časový úsek, po kterém můžete nějakou akci opakovat, je tedy jedna minuta. Crontab se edituje příkazem:
$ crontab -e
Pro editaci crontabu jiného uživatele, musíte mít práva superuživatele a použít přepínač -u:
$ sudo crontab -u user -e
Pokud jste přihlášeni jako root (třeba přes příkaz sudo su), nepoužijete sudo. Nechcete-li editovat, ale jen zobrazit obsah crontab, použijete místo přepínače -e přepínač -l.
Při první editaci crontabu budete dotázáni na editor, ve kterém se bude soubor upravovat (osobně používám nano, které je i doporučeno jako nejjednodušší možnost), a založí se nový soubor, v jehož úvodu je nápověda. Přidávat budete řádky v této syntaxi:
m h dom mon dow command
Význam je následující:
m (Minute) Minuta v hodině - (0 - 59), * hvězdička pro každou minutu
h (Hour) Hodina dne (0 - 23), * hvězdička pro každou hodinu
dom (Day of Month) Den v měsíci (1 - 31), * hvězdička pro každý den
mon (Month) Měsíc v roce (1 - 12), * hvězdička pro každý měsíc
dow (Day of Week) Den v týdnu (0-6), přičemž 0 znamená neděli a * hvězdička každý den
command Příkaz(y), který se má v zadanou dobu provést
Časové údaje můžete definovat jako konkrétní hodnotu, rozsah (např. 2-6), seznam (2,4,6), nebo násobek (např. */5 pro opakování každých pět minut, hodin, atd.).
Cron rozumí i pár speciálním řetězcům, kterými můžete nahradit výše popsaný způsob zápisu času:
řetězec význam
@reboot spustit jednou po restartu systému
@yearly jednou za rok - "0 0 1 1 *".
@annually stejné jako @yearly
@monthly jednou za měsíc - "0 0 1 * *".
@weekly jednou za týden - "0 0 * * 0".
@daily jednou denně - "0 0 * * *".
@midnight stejné jako @daily
@hourly jednou za hodinu - "0 * * * *".
Proměnné prostředí
Při zadávání příkazů do crontabu je potřeba myslet na to, že výchozím shellem je v prostředí cronu /bin/sh, což je v případě Ubuntu odkaz na /bin/dash (výchozím shellem terminálu v Ubuntu je /bin/bash). Nejsou zde definovány všechny systémové proměnné, jako naříklad $DISPLAY, která je nutná pro spouštění grafických aplikací, aby věděly, kam se mají kreslit, $LANG, podle níž se načítá do programů lokalizační soubor a v $PATH je pouze /usr/bin:/bin. Když si otevřete terminál, můžete zjistit hodnoty těchto proměnných ve vašem systému zadáním např. echo $DISPLAY apod. a pak je v crontab definovat podle potřeby příkazem pro změnu prostředí - env. Příkladně, pro spuštění komunikátoru Pidgin každý den, kromě neděle, v 9:00 přidáte do crontab tento řádek:
0 9 * * 1-6 env DISPLAY=:0 LANG="cs_CZ.UTF-8" /usr/bin/pidgin
Bez definice $LANG by se program spustil ve výchozím jazyce, tedy anglicky, a $DISPLAY zde určuje, že se použije výchozí obrazovka.
Pro spuštění sekvence bash příkazů, můžete v cronu použít příkaz bash s přepínačem -c:
0 9 * * 1-6 bash -c "příkaz; příkaz; ..."
Pro spuštění sekvence bash příkazů, můžete v cronu použít příkaz bash s přepínačem -c:
0 9 * * 1-6 bash -c "příkaz; příkaz; ..."
Grafický nástroj pro editaci crontab
Pokud máte raději klikací nástroje, máte možnost si doinstalovat program Gnome Schedule, který může práci s cronem zjednodušit především začátečníkům.
$ sudo apt-get install gnome-schedule
Anacron
Pokud vám počítač neběží neustále a zapínáte ho nepravidelně, je tu ještě program Anacron, který sice není schopen menšího rozlišení, než jeden den, ale oproti Cronu nepropásne akci jen proto, že v danou chvíli počítač neběží. Po každém spuštění zkontroluje, zda v daném období byly spuštěny všechny naplánované úlohy a pokud ne, napraví to a uloží si o tom záznam. Pokud tedy naplánujete akci na pondělí, ale počítač v neděli vypnete a opět zapnete až ve středu, provede se ona pondělní akce ve středu. Na druhou stranu se zas nedá konfigurovat pro každého uživatele zvlášť. Neběží jako démon, ale spouští se nejčastěji při startu systému. Více snad doplním časem, zatím odkážu na manuál (man anacron).
Odkazy:
Žádné komentáře:
Okomentovat
Zkuste prosím při komentováni používat místo volby Anonymní volbu Název/adresa URL, kde vyplníte nějakou přezdívku, adresu zadávat nemusíte. Vědět, které příspěvky jsou od jednoho člověka, je fajn. Díky.
Pokud by se vám náhodou odeslaný komentář na stránce nezobrazil, vytáhnu ho z koše hned jak si toho všimnu. I Google spam filter se občas sekne.