GNU/Linux >> Znalost Linux >  >> Linux

Cron Jobs a Crontab na Linuxu vysvětleny

Tento tutoriál je kompletním průvodcem pro pochopení cronu v Linuxu a také role souboru crontab.

Jako správce systému je velmi pravděpodobné, že strávíte spoustu času prováděním opakujících se úkolů v systému .

Naštěstí pro vás existuje způsob, jak automatizovat úlohy v systémech Linux:cron job .

Cron, původně postavený v roce 1975 laboratoří AT&T Bell Laboratories, se vyvinul tak, aby se stal referencí v Linuxu, pokud jde o plánování a provádění úloh v pevných datech nebo obdobích.

V dnešním tutoriálu se podíváme na démona cron , úlohy cron a příkaz crontab na Linuxu.

Také poukážeme na rozdíl mezi uživatelsky definovanými úlohami cron a systémově definovanými úlohami cron.

Jste připraveni?

Co jsou Cron a Cron Jobs?

Cron je systémový démon spuštěný na jakémkoli systému Linux, který je zodpovědný za detekci úloh cron a jejich provádění v daných intervalech.

Cron se spouští každou minutu a zkontroluje sadu předdefinovaných adresářů ve vašem souborovém systému, aby zjistil, zda je třeba spouštět úlohy.

Na druhou stranu úlohy cron jsou úlohy definované tak, aby se spouštěly v daných intervalech nebo periodách, obvykle to jsou skripty shellu nebo jednoduché příkazy bash.

Úlohy cron se obvykle používají k protokolování určitých událostí do vašich nástrojů Syslog nebo k plánování operací zálohování na vašem hostiteli (jako jsou zálohy databáze nebo zálohy souborového systému).

V případě operačního systému Linux se systémem systemd jako správce služeb můžete službu cron zkontrolovat spuštěním následujícího příkazu

$ sudo systemctl status cron.service

Poznámka :ke kontrole systémových služeb pomocí systemd

potřebujete oprávnění sudo

Co je syntaxe úlohy Cron?

Nejdůležitější, co byste měli vědět o cronu, je pravděpodobně syntaxe úlohy cron.

Chcete-li definovat úlohu cron, budete definovat :

  • Periodičnost :znamená, kdy bude vaše úloha v průběhu času provedena. Můžete jej definovat tak, aby se spouštěl každý první den v měsíci, každých 5 minut nebo ve velmi konkrétní den v roce. Příklady budou uvedeny dále v článku;
  • Příkaz :doslova příkaz, který má být spuštěn obslužným programem cron, může to být příkaz pro zálohování nebo jakýkoli příkaz, který byste normálně spouštěli v shellu;
  • Uživatel :toto je vyhrazeno pro systémově definované úlohy cron, kde chcete zadat uživatele, který má příkaz cron zadat. Pro uživatelem definované úlohy cron nemusíte specifikovat uživatele a váš systém je bude ve výchozím nastavení spouštět jako root.

Jak jste si jistě všimli, sloupec periodicity se skládá z5 sloupců.

Každý jednotlivý sloupec lze nastavit na * , což znamená, že příkaz bude proveden pro každou jednotlivou hodnotu zadaného intervalu nebo pro určitou hodnotu, například 6. měsíc v roce.

Pokud chcete provést příkaz každou minutu, každou hodinu, každý den v měsíci, každý měsíc , opravili byste následující příkaz

* * * * *  logger "This is a command executed every minute"

Pokud chcete provádět příkaz každých 30 minut , napsali byste

*/30 * * * * logger "This is executed every 30 minutes"

Na druhou stranu, pokud chceteprovést příkaz první den v měsíci o půlnoci , napsali byste

0 0 1 * * logger "This is executed on the first day of the month, at midnight"

Při definování těchto úloh cron jsem nemusel specifikovat uživatele, který je provádí.

Je to proto, že existuje rozdíl mezi uživatelsky definovanými úlohami cron a systémově definovanými úlohami cron.

Uživatelsky definované úlohy Cron

Uživatelsky definované úlohy cron jsou úlohy cron definované daným uživatelem na hostiteli. Neznamená to, že není schopen provádět příkazy ovlivňující celý systém, ale jeho úkoly jsou izolované na daných složkách na hostiteli.

Každý uživatel může mít na hostiteli Linuxu vlastní sadu úloh cron.

Výpis uživatelem definovaných úloh cron

Když jste připojeni ke konkrétnímu uživateli, spusťte tento příkaz, abyste viděli úlohy cron vlastněné uživatelem

$ crontab -l

Pokud vlastníte úlohy cron, budou okamžitě zobrazeny na standardním výstupu.

Ve výchozím nastavení jsou uživatelem definované úlohy cron uloženy v adresáři /var/spool/cron/crontabs, ale abyste je mohli prozkoumat, musíte být root.

Přidání uživatelsky definovaných úloh cron

Chcete-li upravit úlohy cron související s uživatelem, ke kterému jste připojeni, spusťte následující příkaz

$ crontab -e

Ve výchozím nastavení váš hostitel otevře váš výchozí editor a vy budete moci v systému aktivovat úlohy cronu.

Přidejte nový řádek na konec souboru s následujícím řádkem, například

* * * * * logger "This is a log command from devconnected"

Logger je příkaz, který umožňuje uživatelům psát vlastní zprávy do protokolů. Pokud potřebujete kompletního průvodce protokolováním a Syslogem, máme o něm kompletní popis.

Nemusíte specifikovat uživatele, protože systém již ví, že uživatel definuje tento příkaz.

Navíc bude příkaz proveden jako aktuální uživatel ve výchozím nastavení.

Nemusíte restartovat žádné služby, vaše úloha bude zohledněna při příštím výskytu.

Vzhledem k příkladu, který jsme uvedli dříve, zkontrolujte své protokoly, abyste viděli, jak byla vaše úloha cron provedena

$ sudo journalctl -xfn

Jak můžete vidět, služba cron zkontrolovala adresáře specifické pro uživatele na hostiteli (v /var/spool/cron/crontabs ), otevřel relaci jako můj aktuální uživatel, provedl příkaz a relaci ukončil.

Úžasný!

Naučili jste se, jak můžete definovat uživatelem definované úlohy cron na vašem hostiteli.

Odebrání uživatelsky definovaných úloh cron

Chcete-li odstranit uživatelem definované úlohy cron, použijte následující příkaz

$ crontab -r
(or)
$ crontab -ri

Crontab bude smazán pro vašeho aktuálního uživatele (neodstraní systémově definované úlohy cron).

Spusťte výpis úloh cron a zkontrolujte, zda byly všechny úlohy cron odstraněny

Systémově definované úlohy cron

Úlohy cron definované systémem jsou úlohy definované ve sdílených adresářích v souborovém systému.

Znamená to, že za předpokladu, že máte na hostiteli oprávnění sudo, budete moci definovat úlohy cron, které mohou být změněny jinými správci ve vašem systému.

Adresáře související se systémově definovanými úlohami cron jsou umístěny v adresáři etc a lze je zobrazit spuštěním

$ ls -l | grep cron

Jak můžete vidět, tato složka obsahuje mnoho různých složek a souborů:

  • anacrontab :soubor používaný službou anacron v systému Linux, který bude vysvětlen v jedné z následujících částí.
  • cron.d :adresář obsahující seznam úloh cron, které má služba cron číst. Soubory v cron.d jsou zapsány podle syntaxe cron, kterou jsme viděli dříve;
  • cron.daily :adresář obsahující seznam skriptů, které má systém každý den spustit. Soubory se liší od souborů obsažených v adresáři cron.d, protože se jedná o skutečné bash skripty a nikoli úlohy cron napsané pomocí syntaxe cron;
  • cron.hourly, cron.monthly, cron.weekly jsou samozřejmé, obsahují skripty spouštěné každou hodinu, každý měsíc a každý týden v roce;
  • crontab :soubor cron napsaný syntaxí cron, který dává službě cron pokyn ke spouštění úloh umístěných v denních, hodinových, měsíčních a týdenních složkách. Může také definovat vlastní úlohy podobně jako uživatelsky definované úlohy cron, s tím rozdílem, že musíte určit uživatele, který má příkaz spustit.

Výpis úloh cronu definovaných systémem

Jak jste pravděpodobně pochopili, úlohy cron definované v globálních konfiguračních složkách jsou rozloženy do více složek.

Kromě toho lze v těchto složkách definovat více souborů cron.

Pomocí příkazového řádku však existuje účinný způsob, jak zřetězit všechny soubory v daném adresáři.

Chcete-li vypsat všechny úlohy cron definované v cron.d, spusťte následující příkaz

$ cat /etc/cron.d/*

Podobně, chcete-li vypsat úlohy cron definované v souboru crontab, spusťte následující příkaz

$ cat /etc/crontab

Podobně můžete zkontrolovat všechny skripty, které se budou denně spouštět

ls -l /etc/cron.daily/

Přidávání úloh cronu definovaných systémem

Jak jste pravděpodobně pochopili, existuje několik způsobů, jak přidat systémově definované úlohy cron.

Můžete vytvořit soubor cron v cron.d a soubor bude každou minutu kontrolován, zda nedošlo ke změnám.

Úlohu cron můžete také přidat přímo do souboru crontab. Pokud chcete provést úlohu každou minutu nebo každou hodinu, doporučujeme přidat svůj script přímo do odpovídajících adresářů cron.

Jediný rozdíl od uživatelem definovaných úloh cron je ten, že budete muset určit uživatele, který bude příkaz cron spouštět.

Vytvořte například nový soubor v adresáři cron.d a přidejte do něj následující obsah (pro spuštění příkazů budete samozřejmě potřebovat oprávnění sudo)

$ sudo nano /etc/cron.d/custom-cron

*/1 * * * *    root    logger 'This is a cron from cron.d'

Opět není třeba restartovat žádné služby, služba cron zkontroluje váš soubor při další iteraci.

Chcete-li vidět svou úlohu cron v akci, spusťte následující příkaz

$ sudo journalctl -xfn 100 | grep logger

Toto byste měli vidět na obrazovce

Skvělé!

Jak můžete vidět, vaši úlohu nyní každou minutu provádí uživatel root na vašem hostiteli.

Nyní, když máte úplnou představu o tom, co jsou to uživatelem definované úlohy cron a systémově definované úlohy cron, podívejme se na kompletní životní cyklus cronu na hostiteli Linuxu.

Cron Complete Cycle on Linux

Bez dalších okolků zde je kompletní cron cyklus na Linuxu.

To je to, co vaše cron služba dělá každou minutu, stejně jako všechny zkontrolované adresáře.

Cron zkontroluje uživatelem definované úlohy cron a v případě potřeby je spusťte.

Zkontroluje také crontab soubor, kde je standardně definováno několik výchozích úloh cron.

Tyto výchozí úlohy cronu jsou skripty, které instruují vašeho hostitele, aby každou minutu, každou hodinu, každý den a každý týden ověřil konkrétní složky a spustil skripty, které se v nich nacházejí.

Nakonec je zkontrolován adresář cron.d . Soubor cron.d může obsahovat vlastní soubory cron a obsahuje také velmi důležitý soubor, kterým je soubor cron anacronu.

Cron soubor Anacron v systému Linux

Soubor anacronu cron je soubor spouštěný každou půlhodinu mezi 7:00 a 23:00.

Soubor anacron cron je zodpovědný za volání služby anacron .

Služba anacron je služba, která je zodpovědná za spouštění úloh cron pro případ, že by je váš počítač vůbec nemohl spustit.

Předpokládejme, že váš počítač je vypnutý, ale měli jste úlohu cron zodpovědnou za spouštění aktualizačních skriptů každý týden.

V důsledku toho služba anacron při zapínání počítače namísto čekání celého týdne na spuštění těchto aktualizačních skriptů zjistí, že jste dříve nebyli schopni spustit aktualizační cron.

Anacron poté spustí úlohu cron pro váš systém, který má být aktualizován.

Ve výchozím nastavení má soubor anacron cron pokyn k ověření, že adresáře cron.daily, cron.weekly, cron.hourly a cron.monthly byly v minulosti správně volány.

Pokud anacron zjistí, že úlohy cron ve složce cron.monthly nebyly spuštěny, bude mít na starosti jejich spuštění.

Závěr

Dnes jste se dozvěděli, jak cron a crontab fungují na Linuxu.

Také jste měli úplný úvod do syntaxe cronu a toho, jak definovat své vlastní cron skripty jako uživatel na vašem hostiteli.

Konečně jste měli úplný přehled cyklu cron o tom, jak věci fungují na vašem hostiteli a co je to anacron.

Pokud vás zajímá administrace systému Linux, máme o ní na našem webu kompletní sekci. Klikněte na obrázek níže a podívejte se na to.


Linux
  1. Jak používat cron na Linuxu

  2. Linuxové příkazy:jobs, bg a fg

  3. Jak naplánovat úlohy Cron pomocí Crontab

  1. Jak automatizovat úlohy v Linuxu pomocí Crontab

  2. Plánování úloh Cron pomocí Crontab

  3. Linux:Spusťte úlohu cron v popředí

  1. Jak vypsat Cron Jobs v Linuxu

  2. Různé způsoby plánování a výpisu úloh CRON v Linuxu

  3. Co je Crontab a jak automatizovat úlohy v Linuxu pomocí Crontabu