Jak naplánovat úkoly v Linuxu pomocí Cron a Crontab

Jak naplánovat úkoly v Linuxu pomocí Cron a Crontab

Věděli jste, že Blade Runner se odehrává v roce 2019? To jsou za tři roky! Nemluvě Návrat do budoucnosti 2 , kde cestují časem vpřed do roku 2015. Přesto nemáme létající auta a nejsou mezi námi žádní replikanti (pokud vím).





Je snadné cítit se zklamaný současnou technologií, když ji porovnáme s fiktivními vyobrazeními budoucnosti. Přesto dnes naše telefony, počítače a dokonce i domy dokážou úžasné věci. Schopnost automatizovat úkoly je jednou z nich.





Každý uživatel Linuxu může mít prospěch z plánování úkolů, ať už souvisí se systémem (jako je čištění starých protokolů a aktualizace balíčků ) nebo obsluhování uživatele (kontrola e -mailu, stahování podcastů ...). Uživatelé Windows mají Plánovač úloh od Windows 95. Nástroj, který dělá stejnou práci v Linuxu, se nazývá cron a zde vysvětlíme, jak jej používat.





můžete přidat ram k macbook pro

Co je Cron?

Cron je systémová služba, která běží na pozadí, kontroluje naplánované úlohy a pokud je najde, spustí je. Úkoly - nazývané také „úlohy cron“ - jsou definovány ve speciálních konfiguračních souborech (crontabs), které cron skenuje každou minutu. V různých distribucích Linuxu lze najít několik verzí cron. Například se nazývá Fedorova vidlice cronu cronie , a existují také fcron , bcron , a dcron . Některé mají další funkce, zatímco jiné se více zaměřují na zabezpečení, ale všechny jsou založeny na stejné myšlence.

Tato příručka je napsána pro vixie-cron, což je nejrozšířenější verze cronu a ta, kterou najdete na Ubuntu a jeho derivátech. Přestože se většina pokynů vztahuje i na jiné implementace cron, mohou zde být drobné rozdíly, takže pokud se rozhodnete přejít, podívejte se do jejich příruček.



Co je Crontab?

Pokud to se správou svého času myslíte vážně, pravděpodobně máte nějaký kalendář - aplikaci nebo alespoň kousek papíru. Crontab je velmi podobný kalendáři vašeho počítače. Obsahuje informace o naplánovaných úkolech a říká cronu, které příkazy se mají spustit v jakou dobu.

Ve skutečnosti je ve vašem systému několik crontabů. Každý uživatel má svůj vlastní crontab, včetně root (správce). Uživatelské crontaby jsou uloženy v





/var/spool/cron/crontabs/

. The

crontab -l

příkaz vypíše soubor crontab pro aktuálního uživatele. Root crontab můžete zkontrolovat pomocí





sudo crontab -l

.

Kromě toho existuje soubor crontab systému

/etc/crontab

který se používá pro úkoly celého systému. Obvykle mají formu spustitelných skriptů vlastněných rootem umístěných v

/etc/cron.hourly/

,

/etc/cron.daily/

,

/etc/cron.weekly/

, a

/etc/cron.monthly/

složky a u některých distribucí soubor

/etc/cron.d/

složka také. Obecně řečeno, neměli byste se těmito úkoly zabývat, protože většina z nich je vytvářena automaticky nainstalovanými aplikacemi.

Jak naplánovat úkoly pomocí Cronu

Zní to jednoduše: Chcete -li naplánovat úkoly, přidejte je na svůj crontab. Protože crontab je speciální konfigurační soubor, nedoporučuje se jej upravovat ručně. Místo toho použijte

crontab -e

příkaz. Chcete -li upravit crontaby uživatele root nebo jiných uživatelů, spusťte příkaz s oprávněními správce a přidejte jejich uživatelské jméno za volbu -u:

sudo crontab -u root -e
sudo crontab -u username -e

Soubor crontab má dvě části. První obsahuje proměnné prostředí, které se nastavují automaticky. Můžete bezpečně změnit proměnné PATH, HOME a SHELL a upravit proměnnou MAIL.

Druhá část souboru je skutečný 'časový rozvrh' s vašimi naplánovanými úkoly. Každý úkol zabírá řádek (řádek) v tabulce, přičemž sloupce představují následující hodnoty:

Chcete -li úspěšně naplánovat úkoly, potřebujete vědět něco o syntaxi crontab:

  • Čísla by měla být celá čísla (celá čísla) a hvězdičku (*) můžete použít v libovolném sloupci jako zástupný znak, což znamená „každou minutu/den/měsíc ...“.
  • Ve sloupci „Den v měsíci“ dávejte pozor, abyste nenastavili datum, které se nevyskytuje v měsíci uvedeném ve sloupci „Měsíc“ (například 30. února).
  • Sloupce „Měsíc“ a „Den v týdnu“ přijímají krátká jména pro měsíce a dny a nerozlišují velká a malá písmena.
  • Ve sloupci „Den v týdnu“ 0 a 7 znamenají neděli. Sloupec 'Hodina' vyžaduje formát 'vojenský čas' (24 hodin), ale nemůžete použít číslo 24-místo toho 0 znamená 12:00 Důvodem je, že hodnoty pro minutu, hodinu a den v týdnu začínají na 0 místo 1.
  • Sekundy nejsou podporovány, takže nemůžete naplánovat úkol na konkrétní sekundu.

Co můžete udělat, je naplánovat inkluzivní časové rozsahy pomocí spojovníku (14-22 v části „Hodiny“ bude úkol spouštět nepřetržitě od 14:00 do 22:00) nebo spustit několik úkolů několikrát definováním seznamu odděleného čárkami (1, 3,5 v části „Den v týdnu“ spustí úlohu v pondělí, ve středu a v pátek).

Mezitím jsou krokové hodnoty reprezentovány lomítkem (/) a ty udávají množství přeskočení v rozsahu; například 3-20/3 v sekci „Hodiny“ spustí úlohu každé tři hodiny od 3 do 20 hodin To je užitečné, když chcete úkoly opakovat každých X hodin, protože můžete kombinovat hvězdičku a krok (*/X). Rozsahy můžete kombinovat se seznamy a kroky s rozsahy, pokud používáte čísla. Jinými slovy, kombinace jako „jan-mar“ nebo „út, pá-ne“ nejsou povoleny.

Alternativně místo nastavení hodnoty pro každý sloupec můžete na začátek řádku napsat pouze @týden, @rok, @měsíc, @den nebo @hodinu, za kterým následuje příkaz. Takto naplánované úkoly budou spuštěny v první možné instanci, takže @týden bude běžet o půlnoci prvního dne v týdnu. Pokud chcete spustit úlohu okamžitě po spuštění systému (re), použijte příkaz @reboot.

V tomto případě jsme naplánovali zálohování každý den na 08:20 a 20:20. Tapeta se automaticky mění každé tři dny v 19:00 a skript bude kontrolovat nové podcasty každé pondělí v 10:20 a 20:20. Připomenutí narozenin je nastaveno na 25. března a běží každých 30 minut ve stanoveném časovém rámci. Nakonec skript kontroluje e -maily každých 15 minut od 8 do 20, ale pouze v pracovní dny. Svou crontab můžete libovolně organizovat pomocí mezer a tabulátorů mezi sloupci, ale ne uvnitř nich (mezery nedávejte mezi čárky, spojovníky a lomítka).

Pokud to všechno zní příliš komplikovaně, nebojte se - na internet se můžete vždy spolehnout. Nástroje jako Crontab generátor , Crontab.guru , a Corntab vám pomůže vytvořit úlohy cron bez znalosti jakékoli syntaxe crontab. Ukazují, kdy se úloha spustí příště, a poskytují šablony pro běžně používané výrazy. Crontab.guru je nejlepší ze skupiny, protože vám umožňuje živě testovat syntaxi crontab, takže můžete okamžitě vidět, jak vaše změny ovlivní rozvrh.

Jak zkontrolovat, zda jsou prováděny úlohy Cron

Cron má běžet tiše na pozadí a nechat vás nerušeně pracovat, zatímco se stará o vaše úkoly. Jak se ale můžete ujistit, že skutečně funguje?

Cron má vestavěnou funkci upozornění na e-mail, ale to vyžaduje nastavení alespoň jednoduchého místního poštovního serveru. Není mnoho domácích uživatelů, kteří jsou ochotni to konfigurovat, a jen málo distribucí to ve výchozím nastavení poskytuje (například Ubuntu ne). Nejrychlejší způsob kontroly na cronu je skenování systémového protokolu pomocí tohoto příkazu:

cat /var/log/syslog | grep -i cron

Díky možnosti -i náš dotaz nerozlišuje malá a velká písmena. Je možné, že cron bude mít někde v

/var/log/

, podívejte se tam, pokud tento příkaz nepřinese užitečné výsledky.

Pokud potřebujete uložit výstup konkrétní úlohy cron, můžete ji přesměrovat do souboru. Zadejte cestu a název souboru v posledním sloupci crontabu za příkazem, který chcete spustit:

30 * * * * /usr/bin/yourcommand > /home/username/logfile.txt

Použití jediného symbolu> přepíše soubor při každém spuštění příkazu. Abyste tomu zabránili, použijte místo toho >> - připojí výstup ke stávajícímu souboru.

Co když Cron nefunguje?

Může se stát, že jste přidali nějaké úkoly, zkontrolovali systémové protokoly a zjistili, že se nespouštějí tak, jak by měli. Zde je několik věcí, které byste měli při pokusu o vyřešení problému zvážit - a dávat na ně pozor.

Je služba cron spuštěna?

Jak víte, démon cron by měl běžet na pozadí. Ujistěte se, že tomu tak skutečně je. Služba se nazývá buď crond, nebo jen cron.

Distribuce pomocí systemd:

systemctl status cron

Distribuce pomocí Upstart:

service cron status

Pokud vaše distribuce používá „starý“ přístup inicializace System V, seznam všech služeb pomocí:

jak mít živou tapetu ve Windows 10
initctl list

a zkontrolujte, zda je uveden cron.

Máte dokonce povoleno mít soubor crontab?

Zkontrolujte svůj

/etc

složka pro pojmenované soubory

cron.allow

a

cron.deny

. V Ubuntu by nemělo existovat ani jedno, což znamená, že všichni uživatelé mohou spravovat úlohy cron. Pokud však existuje a

jak přepošlete text na iphone
cron.allow

soubor, musí obsahovat vaše uživatelské jméno. Naopak, pokud

cron.deny

soubor existuje, vaše uživatelské jméno by v něm nemělo být. Opuštění

cron.deny

prázdný soubor znamená, že pouze root a uživatelé uvedení v

cron.allow

může mít soubory crontab.

Jsou vaše proměnné správně nastaveny?

Crontab automaticky nastaví vaši proměnnou SHELL na

/bin/sh

. Nicméně pokud vaší vybranou skořápkou jsou ryby nebo bash, měli byste změnit proměnnou SHELL

. Podobně proměnná PATH obsahuje ve výchozím nastavení pouze několik adresářů. Zde crontab hledá příkazy Linuxu. Pokud se vaše úloha cron nedaří spustit, může to být proto, že crontab 'nevidí' příkaz, který jste použili. Abyste tomu zabránili, přidejte do proměnné PATH adresáře obsahující příkazy oddělené dvojtečkami:

PATH =/opt/myapp/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Pokud to nechcete ve svém crontabu upravovat, můžete tyto proměnné definovat ve skriptu, který chcete spustit jako úlohu cron.

Je vaše formátování crontab na místě?

Syntaxe Crontabu není zrovna plynulá. I když to ověříte pomocí dříve zmíněných online nástrojů, drobná chyba by mohla stále zabránit cronu ve provádění vašich úloh. Dávejte pozor na:

  • přidejte prázdný řádek na konec souboru crontab
  • uniknout ze znaku % zpětným lomítkem, pokud jej váš příkaz obsahuje
  • pište komentáře jako samostatné řádky začínající na #. Nepište komentáře na stejný řádek jako proměnné prostředí nebo vedle příkazů cron job.

Opravdu musíte používat terminál?

Rozhodně ne. Uživatelé KDE mohou naplánovat úlohy cron pomocí KCron, který je přístupný z Nastavení systému> Plánovač úloh modul. Díky jednoduchému rozhraní, které vám umožní vybrat a vyladit vše pomocí několika kliknutí myší, je KCron radost používat.

Pokud dáváte přednost GNOME, pak Plán GNOME je pro tebe. Přístup je podobný, i když rozhraní se, jak se dalo očekávat, mírně liší. Nabízí pokročilý režim pro jemnozrnné úpravy a je dodáván s panelovým apletem, ze kterého můžete přímo spravovat úkoly.

Měli byste si být vědomi dalších řešení, jako je Crontab-UI a Minicron . Jsou vhodnější pro uživatele, kteří spravují více strojů a úlohy cron, a jednou z jejich nejlepších funkcí je webové rozhraní.

Existují nějaké alternativy Cron?

Zatímco cron je do značné míry standardní plánovač úloh pro Linux, rozhodně není jediný. The na povel je ideální pro rychlé, jednorázové úlohy, které lze naplánovat přímo z příkazového řádku, bez speciálních konfiguračních souborů. Pokud potřebujete více, existuje GNUbatch , který zavádí pojem závislosti. Pomocí GNUbatch můžete pro každou úlohu nastavit konkrétní podmínky nebo naplánovaný úkol záviset na předchozím. Něco podobného lze dosáhnout pomocí systemd timers . Přestože je konfigurace časovače méně praktická než cron, systémové časovače si dokážou zapamatovat, zda úkol zmeškal svůj plán, když byl počítač vypnutý, a spustit jej při příštím zapnutí.

To je něco, co cron nemůže udělat sám. Jako takový je vhodný pro servery a počítače, které jsou neustále spuštěny, ale neprovede úlohu, která byla naplánována, když byl počítač vypnutý. To je kde anacron vstupuje do hry. Technicky to není „alternativa“ ani náhrada za cron. Místo toho anacron doplňuje cron a měl by být používán vedle něj, což je případ mnoha distribucí Linuxu, včetně produktů založených na Ubuntu a Ubuntu. Anacron zaznamenává, kdy byl úkol naposledy proveden, a kontroluje, zda nedošlo k chybějícím instancím, když byl systém vypnutý. Spustí je, když počítač znovu zapnete, ale každý úkol lze provést pouze jednou denně.

Některé verze cronu, jako fcron, standardně nabízejí funkce anacronu. Pokročilí uživatelé by se mohli chtít podívat Hcron nebo SuperCron , které přinášejí mnoho vylepšení základních funkcí cron, ale jejich správa je také poněkud náročná.

Co o tobě? Jak organizujete své digitální úkoly? Jaké úkoly plánujete na Linuxu? Podělte se o své příběhy a tipy pro používání cron v komentářích.

Obrázek kreditu: plánovací tabule od Gonzala Aragona přes Shutterstock

Podíl Podíl tweet E-mailem 12 video stránek, které jsou lepší než YouTube

Zde jsou některé alternativní video weby k YouTube. Každý z nich zaujímá jiný výklenek, ale stojí za to přidat do vašich záložek.

Číst dále
Související témata
  • Linux
  • Linux
O autorovi Ivana Isadora Devcic(24 článků zveřejněno)

Ivana Isadora je nezávislá spisovatelka a překladatelka, milovnice Linuxu a fanynka KDE. Podporuje a propaguje bezplatný i open source software a vždy hledá nové, inovativní aplikace. Zjistěte, jak se dostat do kontaktu tady .

Více od Ivany Isadory Devcic

Přihlaste se k odběru našeho zpravodaje

Připojte se k našemu zpravodaji a získejte technické tipy, recenze, bezplatné elektronické knihy a exkluzivní nabídky!

Kliknutím sem se přihlásíte k odběru