Rekapitulace
Tento článek přímo navazuje na téma Upstart zpřehlední a zrychlí start systému. V předchozím článku jsme si stručně představili inicializační systém Upstart a vysvětlili jsme si jeho výhody proti klasickému sysvinit.
Upstart nahrazuje tradiční inicializační skripty, které předem určují, který proces se bude v jakou chvíli spouštět a pevně tak plánuje všechny systémové akce. Proti tomu Upstart jen definuje seznam akcí a ty pak zcela dynamicky a asynchronně spouští podle potřeb a aktuální situace.
To nejvíce oceníme zejména ve chvíli, kdy je potřeba „za jízdy” změnit některé důležité události a systém vnitřně přenastavit. Taková situace často nastává například při dodatečném přidání hardware, který je dnes podporován nejen technickými prostředky, ale také novými jádry.
Kromě zmíněné dynamiky je možno celkově urychlit řadu systémových akcí, protože asynchronní práce dovoluje mnoho nezávislých činností paralelizovat. To zabraňuje zbytečným prostojům, které často vznikají v případě klasického zavádění s použitím předem připravených skriptů.
Dnes se podíváme na to, jak přesně to v Upstart pracuje, jak vypadají jednotlivé akce a jaké události je mohou spouštět.
Události
Princip samotného Upstart můžeme velmi dobře pochopit, pokud se podáme na jednotlivé události, které systém spravuje. Na jejich základě se pak mohou spouštět jednotlivé akce. Vše je v tomto případě rekurzivní, takže spuštěná akce může opět vyvolat události, ty pak nastartují další akce a podobně. Události jsou tedy pro celý Upstart klíčové.
Běžné události, se kterými se můžeme setkat, jsou:
- systém nastartoval
- kořenový svazek je zapisovatelný
- bylo přidáno blokové zařízení
- souborový systém byl připojen
- uběhla předem nastavená časová perioda
- soubor byl pozměněn
- byla spuštěna nebo zastavena jiná akce
- v adresáři jsou nějaké soubory
- bylo nalezeno síťové zařízení
- změnila se konfigurace sítě
- a další
Jak vidíte, událostí je poměrně hodně a jsou z mnoha různých kategorií. Navíc jejich počet není konečný a je možno definovat další podle situace a jednotlivých akcí. Díky tomu je možno reagovat v podstatě na každou důležitou změnu, která se uvnitř systému udá.
Události jsou vyvolávány jednak přímo samotným Upstart, mohou je ovšem spustit i samotné systémové procesy. K tomuto účelu má Upstart speciální informační rozhraní, které pochopitelně zohledňuje i práva jednotlivých programů k vyvolávání událostí. Chaos tedy nehrozí.
Stavy systémových procesů
Každá akce se může nacházet v jednom z pěti různých předem definovaných stavů. Mezi nimi je možné (a nutné) se během „života” služby přepínat. Možnosti jsou:
- Startuje
- Běží
- Čeká
- Znovuspuštění
- Končí
Stavy Běží a Čeká jsou nejběžnější a proces se většinu času nachází právě v nich. Obvykle tento stav trvá do chvíle, než je vyvolána nová událost, která činnost konkrétního procesu změní. V takovém případě je obvykle stav změněn.
Všechny zbývající stavy (tedy kromě Běží a Čeká) jsou jen stavy dočasnými. Znamená to, že po dokončení určité činnosti dojde ke změně. Po přípravě na běh (stav Startuje) se stav změní na Běží a poté co za sebou proces uklidí (stav Končí), dojde k jeho ukončení.
Speciální stav Znovuspuštění se týká procesů, které mají být obnoveny, pokud dojde k jejich nenadálému zastavení. To znamená, že takové služby nemohou být zabity nebo jinak zrušeny. Neprojde-li proces před definitivním ukončením stavem Končí, automaticky se znovu nastartuje. Předtím však může na situaci reagovat tím, že během stavu Znovuspuštění provede například opravnou akci, zaloguje tuto událost a podobně.
Vyvolání událostí
Řekli jsme si, že události může vyvolávat samotný Upstart nebo mohou být vytvořeny některou z dříve spuštěných akcí. Tyto události pak ovlivňují stavy dalších akcí. Je samozřejmě možné, aby událost měnící stav vyvolala událost sama na sebe. Je tak možno v případě dokončení určité činnosti zastavit nadále nepotřebný proces.
Komunikace mezi Upstart a jednotlivými procesy je obousměrná, takže je možno se dotazovat na doplňkové informace, kterými se pak může vedle událostí služba řídí. Často se tak využívá možnosti dotazu na změnu stavu jiné akce, na důvod jejího pádu a podobně. Můžeme tak opět provázat více různých akcí.
Jak Upstart nahrazuje některé služby
Díky velmi široké paletě událostí je možno reagovat na mnoho stavů a vyřizovat práci místo dodatečných démonů. Akce může například definovat své spuštění po určitém časovém úseku (spusť mě za 20 minut) nebo v konkrétní dobu (spusť mě zítra v poledne). Tímto způsobem můžeme pohodlně nahradit cron atd.
Velmi podobně můžeme reagovat na změny ve správě napájení a provádět akce, které jsou jinak zajišťovány démony acpid a apmd. Takto můžeme například změnit nastavení hardware, pokud dojde k odpojení notebooku od napájení.
Dalším dobrým příkladem je správce sítí (Network Manager), který obvykle reaguje na události samostatně a spouští vlastní sadu skriptů pro správu sítí. Bez problémů jej dokáže nahradit Upstart reagující na standardní síťové události.
Integrace těchto systémových služeb má několik velmi pozitivních výhod. Jednak můžeme opět veškerou činnost paralelizovat a tím urychlit například start systému. Dále také ušetříme systémové prostředky, protože místo deseti různých démonů nám běží jen jeden. Největší výhoda tkví ovšem v centrálnosti veškeré konfigurace. Jedním způsobem tak dokážeme kontrolovat většinu systémových služeb.
Za normálních okolností (tedy při použití sysvinit) má každý démon vlastní konfigurační soubory, jejichž syntaxi musíme ovládat, pokud chceme provádět změny v jejich chování. Cron, apmd, Network Manager a další a další konfigurace a skripty. Pokud nasadíme Upstart, najdeme veškeré nastavení v /etc/event.d
. Tam je vše na jednom místě a především zapsáno jedním způsobem.
Závěrem
Přestože se některým vývojářům princip Upstart nelíbí a dávají přednost klasickému init, je zřejmé, že je tento nový systém na dobré cestě nahradit standardní systémové skripty. Přestože není prvním ani posledním projektem tohoto druhu, díky čistému návrhu a podpoře tak velkého hráče, jakým je Canonical, má šanci uspět.
Běžný uživatel ocení rychlejší start systému a dobrou podporu pro hotplug zařízení, případně adekvátní reakce na nové stavy systému. Administrátor přivítá čistou a přímočarou konfiguraci, oddělení jednotlivých akcí a bezproblémovou správu závislostí.