- Příkaz fcron rozšiřuje možnosti cronu tím, že umožňuje spouštění čekajících úloh na počítačích, které nejsou zapnuté 24 hodin denně, 7 dní v týdnu, a nabízí flexibilnější syntaxi plánování.
- Konfigurace a zabezpečení fcronu a cronu je založeno na souborech jako /etc/fcron.conf, /etc/fcron.allow, /etc/fcron.deny, /etc/crontab a adresářích cron.*, spolu s integrací se syslogem.
- Správné používání příkazů fcrontab a crontab spolu s dobrou správou prostředí (cesta, oprávnění, protokoly), je klíčem k spolehlivé automatizaci úkolů bez překvapení.
- Pečlivý návrh plánovaných úloh, vyhýbání se překrývání a kontrola spotřeby zdrojů vám umožňuje využívat automatizace bez snížení výkonu systému.

Pokud pracujete v oblasti systémové administrace Linux Ať už máte domácí server, který je neustále zapnutý, nebo přemýšlíte, jak... Automatizujte úlohy údržby, zálohování a skripty aniž byste museli sledovat hodiny. A právě zde přichází na řadu fcron: plánovač úloh, který jde o krok dál než cron a je mnohem vhodnější pro počítače, které nejsou zapnuté 24 hodin denně, 7 dní v týdnu.
V celém tomto článku se do značných detailů dozvíte, jak plánování úloh pomocí fcronuTato příručka se bude zabývat tím, co odlišuje tohoto démona od cronu a anacronu, jak se integruje se syslogem, které konfigurační soubory jsou zahrnuty, jak používat fcrontab k definování úloh a s jakými typickými problémy se můžete setkat při automatizaci procesů v GNU/Linuxu. Cílem je získat komplexní znalosti jak o fcronu, tak o klasickém ekosystému cronu, abyste si mohli vybrat a nakonfigurovat řešení, které nejlépe vyhovuje vašim potřebám.
Co je fcron a jak se liší od cronu a anacronu?
fcron je démon pro plánování úloh navrženo pro systémy, které nemusí být nutně zapnuté neustále časVyplňuje mezeru mezi cronem (který předpokládá, že je počítač neustále aktivní) a anacronem (zaměřuje se na denní, týdenní a měsíční úkoly bez závislosti na přesném čase).
Zatímco cron každou minutu kontroluje, zda má něco spustit na základě systémového času, jak je vysvětleno v Plánování úloh v Linuxu pomocí cronu a at, fcron je schopen spustit „čekající“ úlohy kterou nebylo možné spustit, protože počítač byl vypnutý. Pokud tedy naplánujete spuštění úlohy každý den ve 03:00 a počítač se zapne v 09:00, fcron se může rozhodnout spustit tuto úlohu, jakmile... bota, v závislosti na konfiguraci, kterou jste mu zadali.
Dalším důležitým rozdílem je, že fcron umožňuje mnohem flexibilnější plánovací výrazyNabízí možnosti jako „každých X hodin provozuschopnosti“, limity souběžnosti, priority a bohatší podmínky než ty, které nabízí klasický cron. Navíc se integruje se syslogem díky jednoduchosti... cronProto jsou všechny jeho protokoly aktivit centralizovány v systémových protokolech.
Stejně jako ostatní programy tohoto typu se i fcron skládá z hlavního démona (fcron) a utilitu pro správu tabulek úloh s názvem fcrontab, což je přímý ekvivalent starého příkazu crontab, ale s přidanou syntaxí a možnostmi.
Konfigurační a přístupové soubory ve fcronu
Po instalaci fcronu se v systému objeví několik klíčových souborů, se kterými byste se měli seznámit. Mezi nejdůležitější patří: /etc/fcron.conf, /etc/fcron.allow y /etc/fcron.deny, kteří řídí celkové chování démona a kteří mohou plánovat úlohy.
Soubor /etc/fcron.conf definuje globální konfiguraci démona fcron: možnosti prostředí, cesty, výchozí chování a parametry, které ovlivňují způsob správy úloh. Ačkoli ve většině základních instalací Není nutné se tohoto souboru dotýkat.Doporučuje se přečíst si manuálovou stránku (man fcron.conf), kde se dozvíte o všech možnostech, zejména pokud chcete využít pokročilé funkce.
Pro řízení přístupu uživatelů používá fcron soubory /etc/fcron.allow y /etc/fcron.denyVelmi podobným způsobem jako v cronu. V souboru fcron.allow můžete explicitně vypsat uživatele, kterým chcete povolit používání fcrontab, zatímco v souboru fcron.deny můžete zadat „černou listinu“ uživatelů, kterým je přístup zablokován. Pokud existuje soubor fcron.allow, má přednost. a fcron.deny je ignorován; pokud žádný neexistuje, výchozí chování je obvykle povolit použití fcronu všem nebo pouze kořen, podle distribuce.
Kromě těchto souborů se démon integruje se zaváděcím systémem prostřednictvím skript Zpočátku, obvykle v /etc/rc.d/init.d/fcron nebo ekvivalentních umístěních v závislosti na distribuci. Tento skript se obvykle dostává do systému prostřednictvím balíčků, jako například blfs-bootscripts, které poskytují potřebné skripty pro aktivaci služeb při spuštění.
Instalace systému a příprava pro použití fcronu
Než začnete plánovat úlohy, musíte mít službu správně nainstalovanou a dobře integrovanou se systémem pro logování a používání uživatelů. Zde přichází na řadu konfigurace. syslog, vytvoření vyhrazeného uživatele a samotný proces kompilace/instalace fcronu, pokud pocházíte ze zdrojového kódu.
Ve výchozím nastavení fcron používá funkci syslog cron psát všechny vaše zprávy. V systémech, kde soubor /etc/syslog.conf Protože pro danou funkci není definován žádný záznam (což je běžné v prostředích jako LFS nebo BLFS), je nutné přidat řádek pro ukládání zpráv do samostatného protokolu. Typický způsob, jak to udělat, je přidat:
cron.* -/var/log/cron.log
Díky tomu budou všechny zprávy označené jako cron (včetně těch z fcronu) uloženy v /var/log/cron.logPo úpravě souboru syslog.conf je nezbytné znovu načtěte démona protokolování (například sysklogd), aby se nová konfigurace projevila, pomocí příkazu jako:
/etc/rc.d/init.d/sysklogd reload
Z bezpečnostního hlediska je dobrým zvykem spouštět fcron pod uživatel a skupina bez oprávněníObvyklou praxí je vytvořit si specifický systémový účet, například:
Vytvořit uživatele a skupinu služeb: groupadd fcron && useradd -c fcron -g fcron fcron
Jakmile je nastaveno prostředí pro protokolování a uživatel služby, můžete pokračovat v kompilaci a instalaci fcronu ze zdrojového kódu, pokud vaše distribuce nenabízí vhodný předkompilovaný balíček. Poměrně běžný pracovní postup zahrnuje spuštění:
Zkompilujte a nainstalujte ze zdrojového kódu: ./configure --without-sendmail --with-answer-all=no && make && make install
Volba –bez-odeslání-pošty Znamená to, že fcron nebude používat MTA (Mail Transfer Agent) k odesílání e-mailů s dokončenými úlohami, ačkoli je s ním bez problémů integrovatelný, pokud ho máte nainstalovaný. Pokud máte zájem o dostávání e-mailových oznámení, můžete použít něco jako --with-sendmail=/ruta/a/tu/MTA v konfiguraci, odkazující na skutečný binární soubor vašeho poštovního serveru.
Parametr –with-answer-all=ne řídí chování konfigurační rutiny, která běží během make installSoučástí tohoto procesu je obvykle dotaz, zda chcete nainstalovat bootovací skript pod /etc/rc.d/init.d a automaticky vytvářet symbolické odkazy na úrovních běhu 2, 3, 4 a 5 a také zastavovat všechny existující instance fcron a spouštět novou. Pokud se jedná o vaši první instalaci a dáváte přednost použití spouštěcího skriptu, který se řídí standardní šablonou vašeho systému (například skripty BLFS), je normální na tyto otázky odpovědět „n“, jak je navrženo v dokumentaci.
Pokud ano Stylové listy OpenJade a DSSSL Po instalaci můžete přidat další možnosti konfigurace, například --with-dsssl-dir=/usr/share/sgml/docbook/dsssl-stylesheets-1.78Tím se vygeneruje dokumentace ze zdrojových kódů v DocBooku. Spuštění příkazu fcron není nutné, ale může být užitečné, pokud chcete mít dokumentaci v dalších formátech.
Použití fcrontab k plánování úloh pomocí fcron
Hlavním nástrojem pro definování a úpravu úloh fcron je fcrontabFunguje podobně jako tradiční crontab, ale se specifickými rozšířeními a vlastní syntaxí fcronu. Každý uživatel může mít svou vlastní tabulku úloh a existuje také systémový fcrontab který je obvykle v /etc/fcrontab.
Při úpravě souboru systémových úloh je nutné explicitně znovu načtěte aby fcron mohl přečíst změny. V případě globálního fcrontab, po úpravě /etc/fcrontab Budete muset spustit něco jako:
Znovu načtěte fcrontab: fcrontab /etc/fcrontab
Tím se načte obsah daného souboru do interní tabulky spravované démonem. Manuálová stránka fcrontab podrobně popisuje všechny možnosti, ale základní způsob použití je podobný jako u cronu. Pro vlastní fcrontab uživatele (včetně roota) jednoduše spusťte:
fcrontab -e
Stejně jako u crontabu se otevře váš výchozí textový editor (vi, nano atd.), který vám umožní přidávat nebo upravovat řádky definující vaše úlohy. Každá položka popisuje, kdy a jak bude příkaz nebo skript proveden, a fcron se stará o jeho spuštění. i když není aktivní přihlašovací relaceJinými slovy, přítomnost nebo nepřítomnost interaktivních uživatelů v systému je irelevantní: úlohy fcron běží na pozadí bez ohledu na to.
Kromě fcrontab nabízí fcron také utilitu fcronsighupjehož funkcí je vyslat signál démonovi, aby znovu si přečtěte tabulky úkolů bez nutnosti restartu služby. To je obzvláště užitečné po častých změnách konfigurace nebo pokud spravujete fcron na systémech s mnoha naplánovanými úlohami.
Plánování úloh pomocí cronu a crontabu: základy a syntaxe
Přestože fcron nabízí mnoho výhod, pochopení jeho fungování zůstává klíčové. klasický cron a jeho soubor crontabprotože mnoho konceptů je sdílených a mnoho distribucí to má ve výchozím nastavení povoleno ihned po instalaci systému.
Cron Je to démon, který běží na pozadí od spuštění operačního systému. Každou minutu kontroluje, zda jsou soubory plánování (například /etc/crontab nebo uživatelské crontaby v /var/spool/cron/crontabsExistuje úloha, jejíž čas provedení se shoduje s aktuálním systémovým časem. Proto je důležité ji správně nakonfigurovat. čas a časové pásmo.
Pro ověření nastavení času v současných systémech se běžně používá timedatectlZobrazí se místní čas, světový čas, časové pásmo a to, zda jsou hodiny synchronizovány s NTP servery. Pokud zjistíte, že časové pásmo je nesprávné, můžete ho upravit pomocí příkazu, jako je tento:
Upravit časové pásmo: timedatectl set-timezone Europe/Madrid
Pokud jde o formát crontab, každý řádek, který definuje úlohu, se řídí klasickou strukturou pěti časových polí a příkazu. Každá hvězdička nebo hodnota označuje konkrétní část data:
- Minuta: od 0 do 59.
- Hora: od 0 do 23.
- Den v měsíci: od 1 do 31.
- Měsíc: od 1 do 12.
- Všední den: od 0 do 6, kde 0 (a někdy 7) představuje neděli.
- Příkaz: příkaz nebo skript, který chcete spustit.
Denní příklad: 00 19 * * * usuario /ruta/al/script/consulta.sh
Příklad neděle: 00 19 * * 0 usuario /ruta/al/script/consulta.sh
Příklad ročního období: 00 19 4 2 * usuario /ruta/al/script/consulta.sh
Syntaxe také umožňuje speciální znaky které umožňují velmi účinná pravidla: hvězdička pro „libovolnou hodnotu“, čárka pro seznamy, pomlčka pro rozsahy (například 1–5, pondělí až pátek), lomítko pro označení periodicity (*/10 pro „každých 10 jednotek“) a kombinace jako „rozsah/výjimka“ pro vyloučení určitých specifických hodnot.
Systémové adresáře crontab a cron.* v Linuxu
V mnoha distribucích, zejména v prostředích jako Debian, je cron organizován kolem systémový crontab v /etc/crontab již několik speciálních adresářů pod /etc/ kde lze skripty nechat běžet v různých předdefinovaných intervalech.
Soubor / etc / crontab Obvykle obsahuje vstupy, které spouštějí příkaz run-parts odkazující na adresáře jako /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly y /etc/cron.monthlyMyšlenka je taková, že jakýkoli skript, který tam umístíte (a který splňuje určitá oprávnění a podmínky názvu), se automaticky spustí v zadaném intervalu, aniž byste museli ručně psát všechny řádky.
Typický příklad /etc/crontab: 17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
Tyto řádky způsobí, že všechny skripty přítomné v uvedených adresářích budou spuštěny každou hodinu, každý den, každý týden a každý měsíc pomocí nástroje run-parts, který je zodpovědný za řetězcové volání všech spustitelných souborů, které splňují určitý vzor názvu.
Aby cron mohl tyto skripty bez problémů spustit, musí být splněno několik podmínek: mít oprávnění ke spuštění, patřit uživateli rootSkupina a ostatní nesmí mít oprávnění k zápisu a název musí obsahovat pouze písmena, číslice, podtržítka nebo pomlčky. Pokud název obsahuje jiné znaky, cron jej jednoduše ignoruje.
Kromě toho je zde adresář /etc/cron.dToto je určeno pro systémové aplikace, aby si tam mohly umístit vlastní soubory crontab, které obsahují specifická pravidla, jež se nevejdou do výše uvedených čtyř adresářů. Debian doporučuje, aby hlavní administrátor umístil svá globální pravidla do /etc/crontab a ponechal /etc/cron.d pro balíčky a služby instalované později.
Řízení přístupu k cronu: cron.allow a cron.deny
Stejně jako fcron, i klasický cron umožňuje omezit, kteří uživatelé mohou vytvářet plánované úlohy, pomocí dvou velmi jednoduchých souborů: /etc/cron.allow y /etc/cron.denyPrvní funguje jako bílá listina a druhá jako černá listina.
Pokud vytvoříte soubor /etc/cron.allow a přidáte do něj jedno nebo více uživatelských jmen, Pouze tito uživatelé budou mít právo používat crontab a definovat si vlastní úkoly, přičemž zbytek bude automaticky blokován. Pokud dáváte přednost opaku, tedy povolení přístupu všem kromě několika málo uživatelů, můžete ponechat soubor /etc/cron.allow prázdný nebo neexistující a použít soubor /etc/cron.deny k zobrazení pouze blokovaných uživatelů.
Výchozí chování: V některých systémech, pokud žádný z těchto souborů neexistuje, má k cronu přístup kterýkoli uživatel; v jiných má však toto oprávnění ve výchozím nastavení pouze uživatel root. Abyste se vyhnuli překvapením, je vhodné si ověřit dokumentaci k vaší distribuci.
Stejný vzorec je replikován pomocí fcronu prostřednictvím /etc/fcron.allow y /etc/fcron.denyTo vám umožňuje sjednotit bezpečnostní zásady pro oba démony a přesně rozhodnout, kdo může co programovat.
Protokolování a ladění naplánovaných úloh
Cron a fcron generují zprávy, které jsou nezbytné pro diagnostikovat problémy, kontrolovat provedení a odhalovat chybyV mnoha systémech se události související s cronem zapisují do /var/log/syslog nebo v konkrétním souboru, jako např. /var/log/cron.log, v závislosti na konfiguraci syslogu nebo rsyslogu.
V konkrétním případě cronu v Debianu je také možné upravit, jaké typy událostí se budou zaznamenávat, pomocí dalších možností v /etc/default/cronTam můžete přidat řádek takto:
EXTRA_OPTS='-L 5'
Parametr -L přijímá číselnou hodnotu, která je součtem několika příznaků: 1 pro zaznamenání začátku úlohy, 2 pro konec, 4 pro úlohy, které končí nenulovým chybovým kódem, a 8 pro zaznamenání PID každého spuštěného procesu. Například hodnota 5 kombinuje 1 a 4.takže se zaznamenávají pouze zahájení úloh a ty, které selžou, čímž se snižuje šum v protokolech.
Fcron, díky využití funkce cron v souboru syslog, těží ze stejné konfigurace: jakmile v souboru /etc/syslog.conf definujete, že cron.* by měl cílit na konkrétní protokol, bude tam zaznamenáváno i vše, co fcron dělá, což je velmi praktické při jemném doladění... programování složitý.
Dopad na výkon a osvědčené postupy při plánování úkolů
Automatizace procesů je skvělá, ale neopatrné používání cronu nebo fcronu může mít... velmi negativní vlivy na výkon systémuJe snadné podlehnout pokušení spouštět velmi náročné skripty příliš často, což má za následek špičky CPU, velké přístupy k disku nebo přesycení sítě.
Příklad zatížení: Když soustředíte několik náročných úloh do stejného časového úseku, můžete způsobit jejich spuštění všech současně, což zatěžuje váš systém. Například provádění velkých záloh, rotace protokolů z mnoha služeb a aktualizace velkých systémů. databází Přímo o půlnoci může být špatný nápad, pokud server v té době také zpracovává kritické požadavky.
Pro zmírnění těchto problémů se doporučuje Rozložte si úkoly a využijte mimošpičkové hodiny, například brzy ráno. Do skriptů můžete také zavést náhodnost nebo podmínky, aby se spouštěly pouze v případě, že je systém dostatečně nečinný (nízké využití CPU, disku nebo sítě).
Priorita a limity: Nástroje jako nice o cpulimit Jsou velmi užitečné: můžete spouštět skripty s nízkou prioritou nebo omezit maximální procento využití CPU, které spotřebovávají. Tímto způsobem, i když se spustí v kritických okamžicích, budou mít menší dopad na ostatní procesy.
Vyhněte se překrývání: V systémech, kde se jedna úloha může překrývat sama se sebou, je vhodné použít utility, jako například flock Aby se zabránilo souběžnému spuštění, běžným vzorem je zabalit skript do zámku souboru: pokud je zámek již obsazen, nový pokus příkazu cron nebo fcron se jednoduše ukončí bez jakékoli akce, čímž se zabrání konfliktům při současném přístupu ke stejným zdrojům.
Časté chyby při používání cronu a fcronu a jak se jim vyhnout
Při plánování úkolů se běžně setkáváme se situacemi, kdy Skripty se buď „nespouští“, nebo se zdají být nepravidelné.Problém často nespočívá v cronu nebo fcronu, ale v detailech prostředí, oprávněních nebo cestách.
Jednou z nejčastějších chyb je předpoklad, že běhové prostředí cron nebo fcron je stejné jako prostředí vaší interaktivní relace. Ve skutečnosti tyto démony spouštějí příkazy v prostředí velmi minimalistický, s omezenou cestouPokud váš skript volá binární soubory jako git, krajta nebo jakýkoli program nainstalovaný v nestandardních cestách a nezadáte úplnou cestu, pravděpodobně selže.
Použijte absolutní cesty: Řešení zahrnuje použití absolutní cesty ve skriptech (například /usr/bin/python místo python) nebo explicitně definujte proměnnou PATH na začátku crontab nebo fcrontab, například takto:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Zkontrolujte oprávnění: Dalším zdrojem problémů jsou oprávnění ke spuštění. Pokud soubor není spustitelný nebo uživatel spouštějící úlohu nemá dostatečná oprávnění k příslušným adresářům a zdrojům, úloha selže tiše nebo zanechá pouze stopy v protokolech. Ověřte si to u ls -l a opravit s chmod +x V případě potřeby zvažte, zda váš skript skutečně potřebuje root oprávnění, nebo zda stačí běžný uživatelský účet.
Důrazně se doporučuje, aby během testů přesměrování stdout a stderr do souborů v rámci záznamů v cronu nebo fcronu, abyste si mohli prohlédnout, co se stalo. Konstrukce jako >/ruta/log.txt 2>&1 Přidání řádku crontab na konec vám může ušetřit hodiny frustrace.
Nakonec nezapomeňte, že zpracování změn času (letní/zimní čas) není vždy jednoduché. Cron se snaží co nejlépe zvládat skoky kratší než tři hodiny, ale pokud vaše úlohy silně závisí na pořadí a době uplynulé mezi jejich spuštěními, Možná by bylo rozumné vyhnout se zóně konfliktu nebo navrhnout speciální pravidla pro ty noci změny času.
Zvládnutí cronu, fcronu a jejich jemných nuancí vám umožní vybudovat velmi výkonnou automatizační vrstvu nad jakýmkoli linuxovým systémem, která kombinuje... jednoduchost vyjádření času s plným potenciálem skriptů a konzolových nástrojů pro údržbu, monitorování a optimalizaci vašich serverů, aniž byste je museli mít neustále pod kontrolou.
Vášnivý spisovatel o světě bytů a technologií obecně. Rád sdílím své znalosti prostřednictvím psaní, a to je to, co budu dělat v tomto blogu, ukážu vám všechny nejzajímavější věci o gadgetech, softwaru, hardwaru, technologických trendech a dalších. Mým cílem je pomoci vám orientovat se v digitálním světě jednoduchým a zábavným způsobem.