Plánování úloh v Linuxu pomocí Crontabu

  • Cron je démon, který spouští naplánované úlohy, a Crontab je soubor, kde jsou definovány, s flexibilní syntaxí založenou na pěti polích času a příkazů.
  • Správná konfigurace času, oprávnění, absolutních cest a proměnných prostředí je klíčem k zajištění správného běhu cron úloh bez tichých chyb.
  • Cron umožňuje automatizovat zálohování, čištění, aktualizace a monitorování, ale pokud je špatně naplánován, může ovlivnit výkon a zabezpečení systému.
  • Existují nástroje a alternativy, jako například Anacron, Fcron, launchd nebo externí služby, které rozšiřují nebo nahrazují Cron ve složitějších scénářích nebo v jiných systémech.

Plánování úloh v Linuxu pomocí Crontabu

Pokud používáte Linux denně, dříve či později budete potřebovat Automatizujte opakující se úlohy pomocí Cronu a CrontabuZálohy, aktualizace, generování reportů, čištění souborů, monitorování… Ruční provádění všech těchto činností je časově náročné a snadno se na to zapomene. A právě zde přichází na řadu Cron, základní kámen administrace systémů Unix a GNU/Linux po celá desetiletí.

I když se na první pohled syntaxe Crontabu může zdát trochu zastrašující, jakmile pochopíte její logiku, uvidíte, že Plánování úloh v Linuxu pomocí Crontabu je mnohem jednodušší, než se zdáTento článek poskytuje komplexního průvodce: co je Cron, co je Crontab, jak psát pravidla, jak ladit chyby, jeho potenciální dopad na výkon, externí nástroje, které můžete použít, alternativy v jiných systémech a případy použití v domácnostech i firmách.

Rozdíly mezi Cronem a Crontabem

O Cronu a Crontabu se často mluví, jako by šlo o totéž, ale ve skutečnosti... Jsou to dva různé kusy, které spolupracují.Pochopení tohoto rozdílu vám ušetří spoustu problémů při ladění úloh, které neběží.

  • Cron Je to démon, který běží na pozadí od okamžiku spuštění systému. Jeho úkol je velmi jednoduchý: každou minutu zkontrolovat sérii konfiguračních souborů a zkontrolujte, zda je třeba provést nějaké naplánované úlohy podle data a času systému.
  • crontabZe své strany je to textový soubor, kde jsou tyto úlohy definoványKaždý uživatel může mít svůj vlastní soubor crontab s pravidly a skripty, které se spouštějí s jeho oprávněními. Démon Cron tyto soubory čte a v případě potřeby spouští příkazy.

V každé moderní linuxové distribuci najdete obě komponenty standardně dostupné, takže Opakující se úlohy můžete naplánovat prakticky v jakékoli distribuciať už je to Debian, Ubuntu, Oracle Linux, CentOS, Rocky, Fedora atd.

cron

Co je Cron a proč je systémový čas kritický?

Cron je systémový démon, který se spouští při spuštění LinuxuObvykle se spouští pomocí klasických bootovacích skriptů v /etc/init.d nebo na ekvivalentních trasách, jako např. /etc/rc.dnebo pomocí jednotek systemd (service crond nebo cron, v závislosti na distribuci). Kontroluje se každou minutu:

/etc/crontab, /etc/cron.d, /var/spool/cron a /var/spool/cron/crontabs (Přesná cesta se liší v závislosti na distribuci) a hledá položky odpovídající aktuální minutě. Pokud nějaké najde, provede uvedený příkaz.

Něco, co mnoho lidí přehlíží, je to, Cron se zcela spoléhá na systémový časPokud jsou hodiny nebo časové pásmo nastaveny nesprávně, vaše úlohy se budou spouštět v nesprávný čas. Chcete-li zkontrolovat čas na moderních systémech, můžete použít:

timedatectl

Tento příkaz zobrazí místní čas, UTC, časové pásmo a zda se systém synchronizuje se servery NTP (Network Time Protocol). V ideálním případě Synchronizace NTP je aktivníprotože se tak hodiny automaticky korigují.

Pokud zjistíte, že časové pásmo je nesprávné, můžete ho změnit například takto timedatectl set-timezone Evropa/Madrid nebo jinou zónu, která odpovídá vaší zemi. V mnoha instalacích Linuxu je NTP konfigurován automaticky, ale pokud si ho chcete přizpůsobit, můžete... /etc/ntp.conf nebo použijte alternativní služby jako chrony.

Co je Crontab a jak je strukturován?

Crontab je soubor, kam zapisujete pravidla provádění naplánovaných úlohKaždý řádek (bez ohledu na komentáře) představuje „úlohu“: kdy se spouští a jaký příkaz se provádí. Obvykle má každý uživatel svůj vlastní crontab v adresáři spool. / var / cívka / cron o /var/spool/cron/crontabs, podle distribuce.

Pro správu osobního crontabu použijte příkaz crontab s několika velmi základními, ale výkonnými možnostmi. Soubory se neupravují ručně pomocí editoru RAW, ale pomocí tohoto příkazu, aby se předešlo chybám v oprávněních nebo formátování.

Základní syntaxe jednoho řádku v Crontabu je založena na pět časových polí plus příkaz:

m h dom mon dow comando

  • Minuta (m): hodnoty od 0 do 59.
  • Hora (h): hodnoty od 0 do 23.
  • Den v měsíci (Ne): od 1 do 31.
  • Měsíc (po): od 1 do 12 nebo zkrácený název (leden, únor atd., podle systému).
  • Všední den (dolů): od 0 do 6 nebo od 0 do 7, přičemž neděle je 0 (a někdy i 7).
  • Příkaz: jakýkoli příkaz, který byste mohli spustit v terminálu, včetně skriptů a přesměrování.

Typickým příkladem by bylo:

00 19 * * * /home/usuario/scripts/backup.sh

Tento řádek označuje, že skript bude spuštěn každý den v 19:00 (19:00), bez ohledu na den v měsíci, měsíc nebo den v týdnu.

crontab

Jak vytvořit, upravit a zobrazit Crontab

Pro práci se souborem osobních úkolů téměř vždy používáte samotný příkaz. crontab. Myšlenka je taková Soubory v adresáři /var/spool/cron/crontabs neupravujte ručně., protože jsou navrženy tak, aby je systém spravoval automaticky.

Nejčastější objednávky jsou:

  • crontab -eOtevřete crontab ve výchozím textovém editoru (v mnoha distribucích) elán o nano) pro vytvoření nebo úpravu položek.
  • crontab -l: zobrazí na obrazovce všechny úlohy naplánované pro vašeho uživatele.
  • crontab -rSmažte celý crontab; tato akce je nevratná. Nepožaduje potvrzení, pokud nepřidáte -i.
  • crontab -i -r: požádá o potvrzení před smazáním crontabu.
  • soubor crontab: nahraďte aktuální crontab obsahem zadaného souboru.
  • crontab -u uživatelspravovat crontab jiného uživatele (pouze root nebo osoby s oprávněními).
  • crontab -c dirNa systémech, které to podporují, definuje adresář, ve kterém bude uložen crontab.

Pokud chcete zálohovat svá nastavení, můžete udělat něco tak jednoduchého jako:

crontab -l > ~/crontab_backup.txt

A pokud ji budete později potřebovat obnovit, jednoduše:

crontab ~/crontab_backup.txt

Pokročilá syntaxe: speciální znaky v Crontabu

Kromě čísel umožňuje Crontab používat Speciální znaky, které výrazně zvyšují flexibilitu syntaxeDíky nim můžete vyjádřit rozsahy, seznamy nebo intervaly kompaktním způsobem.

  • * (hvězdička): označuje „všechny možné hodnoty“ v daném poli. Například * v poli hodin Znamená to všechny hodiny.
  • , (jíst): samostatný seznam konkrétních hodnot. Příklad: 0 6,18 * * * Jede se v 6:00 a 18:00.
  • - (scénář): definuje nepřetržitý rozsah. Příklad: 0 8-17 * * 1-5 Jezdí každou hodinu od 8:00 do 17:00, od pondělí do pátku.
  • / (lomítko)označit krok nebo interval, Například */10 * * * * znamená „každých 10 minut“.
  • rozsah/kromě (v závislosti na implementaci): některé varianty umožňují definovat vyloučené hodnoty, i když to není standard ve všech úlohách cron.

Typickým příkladem kombinovaného použití by bylo:

*/5 2 * * 1-5 /bin/ejecutar/script.sh

Tento řádek spustí příkaz každých 5 minut během 2. hodiny (2:00) od pondělí do pátkuJe to kompaktní způsob, jak nahradit dlouhý seznam minut.

Postava # (podložka) na začátku řádku slouží k přidávat komentářeVšechno za tímto symbolem na stejném řádku je ignorováno, což je ideální pro zdokumentování existence úlohy nebo pro její dočasné zakázání bez jejího smazání.

Klíčová slova a časové zkratky v Crontabu

Pro nejběžnější případy nabízí Crontab zkratky ve formě „rezervovaných slov“ Tyto nahrazují všechna časová pole. Jsou velmi užitečné, když chcete zadat něco jako „každý den“ nebo „každou hodinu“, aniž byste museli přemýšlet o číslech.

  • @restartovat: provede příkaz jakmile se systém spustí.
  • @roční o @každoročnějednou ročně, což odpovídá 0 0 1 1 *.
  • @měsíčníjednou měsíčně, první den o půlnoci, což odpovídá 0 0 1 * *.
  • @týdnějednou týdně, o půlnoci v den 0 (obvykle neděle), což odpovídá 0 0 * * 0.
  • @denně o @půlnocjednou denně, v 00:00, což odpovídá 0 0 * * *.
  • @hodinově: jednou za hodinu, v minutě 0, což odpovídá 0 * * * *.

Například pokud chcete spustit skript každou hodinu, dost s:

@hourly /bin/ejecutar/script.sh

A pokud chcete spustit skript údržby po každém restartuPoužili byste:

@reboot /ruta/a/mi_script.sh

Proměnné prostředí a syntaxe příkazů

Typickým zdrojem chyb je to, že Cron běží v minimálním prostředíNenabíjí se ti to .bashrc ani celé vaše uživatelské prostředí, takže CESTA je velmi omezená (obvykle je to něco jako /usr/bin:/binDíky tomu jsou příkazy jako Python, Git, PHP nebo Pip Nelze je najít, pokud nepoužijete absolutní cestu.

Abyste se tomu vyhnuli, máte dvě možnosti: Vždy používejte kompletní trasy ve vašich skriptech (například /usr/bin/python3 místo python) nebo Definujte proměnné prostředí na začátku crontabuPříkladem by mohlo být:

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
SHELL=/bin/bash
HOME=/home/usuario

Tyto řádky jsou umístěny na začátek souboru crontab, bez časových polía ovlivnit další úlohy, které deklarujete níže. Můžete také definovat OLEJ označit, na kterou e-mailovou adresu se odesílá standardní a chybový výstup úloh.

Pamatujte si, že Příkazy v Crontabu akceptují veškerou syntaxi shelluVýstup můžete přesměrovat do souboru, řetězit příkazy pomocí kanálů atd. Například do uložit veškerý výstup skriptu do protokolu:

* * * * * /home/usuario/helloworld.sh >> /var/log/logs.log 2>&1

A pokud chcete úplně ztišit zprávy a nepřijímat e-maily Pro tuto úlohu můžete přesměrovat na / dev / null:

* * * * * /home/usuario/helloworld.sh >/dev/null 2>&1

Správa výstupů: protokoly a e-mail

V závislosti na distribuci a konfiguraci lze výstup cronu zpracovat několika způsoby. Na systémech jako Oracle Linux nebo minimální Debian, pokud není nainstalován žádný poštovní agent, Démon cron odesílá výstup přímo do logovacího systému..

V mnoha případech si můžete aktivitu cronu prohlédnout v souborech, jako například:

  • /var/log/cron (typické pro Oracle Linux, CentOS, RHEL).
  • / var / log / syslog (běžné v Debianu a jeho derivátech).

Například pro filtrovat pouze zprávy související s cronem V systému, který používá syslog, můžete udělat něco podobného jako:

grep CRON /var/log/syslog

Informace jsou obvykle stručné (čas, uživatel, příkaz), ale pomáhají vám zjistit, zda něco běží nebo zda selhává.

Pokud nainstalujete agenta pro přenos pošty (MTA), jako například Postfix nebo Sendmail, pak se odešle výstup úloh do lokální fronty pošty uživateleObvykle se ukládá do /var/spool/mail/$USER nebo podobné trasy a můžete si je přečíst pomocí nástrojů jako mailx (příkaz mail).

Příjemce e-mailů z cronu můžete navíc ovládat pomocí proměnné OLEJ na začátku crontabu:

MAILTO="tu.correo@ejemplo.com"

Pokud necháte pole MAILTO prázdné, takto:

MAILTO=""

Pak Pro žádnou z úloh definovaných v tomto crontabu nebude odeslán žádný e-mail.To je užitečné, pokud máte mnoho úkolů, které generují konstantní výstup.

guru crontabu

Nástroje a utility pro práci s Cronem

Pokud vám není příjemné psát cron výrazy ručně, existuje několik možností. Nástroje, které vám pomohou generovat pravidla bez chybNěkteré jsou webové služby, jiné grafické aplikace.

  • Crontab Guru: Velmi praktická stránka, kde napíšete cron výraz a ten... Vysvětlete v textu čitelném pro člověka, co to děláUpozorňuje vás na chyby a nabízí běžné příklady a tipy.
  • Generátor Cron úlohOnline asistent pro generování cron výrazů z možností, jako je čas, den, interval atd. Umožňuje vytvářet opakující se úlohy s předdefinovaná nastavení a personalizovat je.
  • EasyCroncloudová služba pro plánování HTTP požadavků na URL adresy v určených intervalech. Široce se používá ke spouštění webových skriptů, úloh API atd. s ovládacím panelem, protokoly a e-mailovými upozorněními.
  • KDE Cron (KCron)grafický nástroj integrovaný do prostředí KDE pro Vytvářejte, upravujte a odstraňujte cron úlohy bez nutnosti použití příkazového řádkuUmožňuje vám vybrat časy a data z vizuálního rozhraní.
  • Tvůrce Cronu: online generátor cron výrazů určený pro integrace s knihovnou Quartz (široce používané v prostředích Java), ale také užitečné pro pochopení složitých kombinací.

Tyto nástroje nenahrazují Cron ve vašem systému, ale Zjednodušují složkovou část výrazusnížení syntaktických chyb.

Typy Crontabu: systémové a uživatelské

V Linuxu existují dva hlavní typy konfiguračních souborů pro plánované úlohy: systémový crontab a uživatelský crontabOba používají velmi podobnou syntaxi, ale nejsou spravovány stejným způsobem.

El Cronab systému, obvykle v / etc / crontab a v souborech /etc/cron.d, obvykle vyžaduje root oprávněníPoužívá se pro kritické systémové úlohy (rotace protokolů, údržba databáze, úlohy zálohování na vysoké úrovni atd.) a na rozdíl od crontabu uživatele explicitně zahrnuje pole uživatele do každého řádku, které indikuje Pod jakou identitou je příkaz proveden?.

L Uživatelský crontab jsou spravovány s crontab -e a jsou uloženy v /var/spool/cron/crontabs nebo podobné místo. Pouze uživatel může odesílat své úlohy. (nebo root, který může spravovat cron úlohy ostatních) a neměly by být přímo upravovány. Chcete-li omezit, kdo může cron používat, můžete soubory upravit /etc/cron.allow y /etc/cron.deny.

Vliv Cronu a Crontabu na výkon

Přestože Cron sám o sobě spotřebovává velmi málo zdrojů, špatné plánování úloh může... negativně ovlivňují výkon systémuProblém obvykle není v cron démonu, ale v tom, co mu přikazujeme k provedení.

Pokud naplánujete spuštění mnoha úloh současně, můžete způsobit Vrcholy využití CPU a RAMNapříklad spuštění tří velkých záloh, reindexace databáze a skriptu pro analýzu protokolů současně téměř zaručuje zpomalení serveru.

Pokud úkoly zahrnují práci v síti (vzdálené kopie, synchronizace s rclone(hromadné přenosy dat), můžete generovat přetížení šířky pásma, zvýšená latence a pingovlivnění dalších služeb, které jsou na připojení závislé.

Existuje také riziko konflikty úkolůDva skripty, které pracují současně na stejném souboru nebo databázi s různými operacemi, mohou způsobit poškození dat nebo podivné chyby, které je obtížné diagnostikovat.

Pro omezení dopadu můžete použít nástroje, jako například pěkný snížit prioritu CPU úlohy nebo CPUlimit omezit maximální procento CPU, které může proces spotřebovat:

  • Nízká priorita CPU:
    0 19 * * * usuario nice -n 19 /ruta/script.sh
  • Omezení využití CPU na 50 %:
    0 19 * * * usuario cpulimit -l 50 /ruta/script.sh

Používání Crontabu pro rutinní úkoly: zálohování, čištění a monitorování

Jednou z velkých výhod Cronu je, že vám umožňuje automatizovat „údržbu“ vašeho stroje téměř bez námahy, což ve střednědobém horizontu zlepšuje výkon a šetří čas.

Velmi typické použití je pravidelně čistit dočasné soubory, mezipaměti a prázdné adresářePomocí skriptu, který maže staré nebo prázdné soubory v určitých cestách, můžete uvolnit místo a snížit fragmentaci souborového systému.

Dalším užitečným vzorem je naplánovat aktualizace systému a aplikací mimo špičku. Například noční práce, která spouští aktualizace apt a upgrade (nebo ekvivalent ve vaší distribuci) umožňuje udržovat systém aktuální bez přerušení každodenní práce.

Můžete také automatizovat zavírání aplikací, které byly příliš dlouho neaktivníuvolnění paměti pro jiné procesy. V prostředí stolních počítačů nebo aplikačních serverů to může mít významný vliv.

A samozřejmě, Cron je perfektní pro monitorovací a logovací skriptyPravidelně zaznamenávejte využití CPU, RAM, disku, latenci sítě atd., ukládejte je do souborů protokolů a poté analyzujte trendy, abyste odhalili úzká hrdla dříve, než se z nich stanou vážné incidenty.

Nevýhody a omezení Cronu a Crontabu

Přestože je Cron extrémně výkonný nástroj, není to perfektní řešení pro všechno. Má Omezení, která stojí za to znát aby to nepřekračovalo rámec toho, co nabízí.

Na jedné straně je křivka učeníPokud pocházíte z grafičtějších prostředí nebo systémů jako Windows, může být zpočátku zastrašující psát cron výrazy ručně a pracovat bez vizuálního rozhraní.

Na druhou stranu je Cron úzce spjat s ekosystémem Unix/Linux. To, co se naučíte, bude užitečné na mnoha serverech a podobných systémech, ale Nebudete ho moci používat v současné podobě ve Windows nebo macOS. (který má své vlastní mechanismy).

Pokud jde o bezpečnost, pokud Konfigurační soubory cron nejsou dobře chráněnyMohou být vstupním bodem pro škodlivé spuštění. Umožnění jakémukoli uživateli programovat věci bez kontroly otevírá dveře problémům.

Dále, Cron Není ideální pro velmi složité úkoly nebo úkoly s mnoha závislostmi.Nezvládá tok chyb pokročilým způsobem, nemůže opakovat pokusy s podmíněnou logikou a nativně se neintegruje s distribuovanými systémy. K tomu existují sofistikovanější plánovače nebo vlastní časovače systemd.

Musíte to také mít na paměti crontab nabízí přesnost pouze na jednu minutuPokud potřebujete něco, co běží několikrát za sekundu nebo v intervalech kratších než jedna minuta, budete muset použít jiné nástroje nebo programové smyčky v samotném skriptu.

Alternativy k Cron a Crontab: Anacron, Fcron, hcron, Mcron a další

V některých případech není Cron ideální volbou. Například pokud máte notebook nebo server, který není neustále zapnutý, Úlohy naplánované na konkrétní čas se mohou „ztratit“ pokud je zařízení v té době vypnuté.

Pro pokrytí takových případů existují alternativy, jako například Anakron, který je určen k provádění periodických úkolů aniž by bylo nutné, aby byl stroj neustále zapnutýPokud byl počítač v době, kdy měl být úkol spuštěn, vypnutý, Anacron jej spustí co nejdříve po spuštění.

Fcron Je to další zajímavá možnost. Nevyžaduje, aby byl systém neustále aktivní; může fungovat s konkrétní data a časya nabízí větší flexibilitu za cenu nutnosti ruční instalace v mnoha distribucích.

hcron Jde to ještě o krok dál a umožňuje použití Štítky pro organizaci úloh, správu strojních sítí a zlepšení bezpečnostiNení to tak populární, ale může se dobře hodit do prostředí, kde je žádoucí centralizovaná správa.

McCon (založený na Guile) se liší tím, že se pro definování plánování úloh spoléhá na kompletní programovací jazyk, což mu dává obrovská síla, pokud jde o předefinování úloh, vytváření závislostí a zpracování složité logiky.

Ve Windows se místo toho používají řešení jako Cron. WinCron, VisualCron nebo pokročilý plánovač úlohkteré poskytují intuitivní grafické rozhraní a srovnatelné funkce, ačkoli jsou integrovány s ekosystémem Microsoftu.

Cron a Crontab v podnikovém prostředí

Ve firmách všech velikostí jsou Cron a Crontab součástí „lepidla“, které udržuje systémy v chodu. Umožňují automatizovat opakující se a kritické procesy bez neustálého lidského zásahu, což snižuje riziko selhání a uvolňuje čas administrátorům.

Mezi nejběžnější obchodní využití patří Plánované zálohy, aktualizace softwaru, generování pravidelných reportů, úlohy údržby databáze a čištění protokolůDíky granularitě syntaxe můžete jemně doladit, kdy se akce provádějí, a minimalizovat tak dopad.

Navíc mají tyto automatizace přímý vliv na efektivitu a produktivituZaměstnanci si nemusí pamatovat na spouštění rutinních procesů, snižuje se počet lidských chyb a okna s nízkým zatížením se lépe využívají k provádění náročných operací.

V obchodním prostředí je však vhodné Pečlivě dokumentujte všechny naplánované úlohy, udržujte zálohy crontabů a pravidelně kontrolujte, zda to, co je definováno, stále dává smysl.Postupem času se snadno hromadí zastaralé úkoly, které nadále spotřebovávají zdroje, aniž by k nim cokoli přispívaly.

Nakonec se Cron a Crontab stanou jakýmsi „automatický plán“ systémuPokud se používají moudře, stanou se nepostradatelnými jak ve skromných serverech, tak ve velkých infrastrukturách s mnoha stroji a umožní vám udržovat pevný základ, na kterém lze stavět další pokročilejší nástroje pro orchestraci nebo monitorování.

Vzhledem ke všemu výše uvedenému je zřejmé, že Plánování úloh v Linuxu pomocí Crontabu zůstává jedním z nejjednodušších a nejúčinnějších způsobů automatizace systému.S několika dobře napsanými řádky zvládnete zálohování, čištění, aktualizace, monitorování a obchodní procesy bez stisknutí tlačítka, pokud budete respektovat jeho limity, spravovat oprávnění, řídit prostředí a rozumně plánovat dopad na výkon a zabezpečení.

automatické zálohování na externí disky
Související článek:
Automatické zálohování: Chraňte svá data na externích discích

Přidat jako preferovaný zdroj