Ako používať príkaz Init v systéme Linux

Init je rodičom všetkých procesov. Jeho hlavnou úlohou je vytvárať procesy zo skriptu uloženého v súbore / etc / inittab (pozri inittab (5)). Tento súbor zvyčajne obsahuje položky, ktoré spôsobujú, že init môže spúšťať getty na každom riadku, ktorý sa môžu používatelia prihlásiť. Tiež kontroluje autonómne procesy požadované v ktoromkoľvek konkrétnom systéme.

runlevels

Riadiaca úroveň je softvérová konfigurácia systému, ktorá umožňuje, aby existovala iba vybraná skupina procesov. Procesy vytvorené initom pre každú z týchto úrovní spustenia sú definované v súbore / etc / inittab . Init môže byť v jednej z ôsmich úrovní chodu: 0-6 a S alebo s . Riadiaca úroveň sa mení tak, že má privilegované užívateľské spustenie telinitu , ktoré vysiela príslušné signály na init , čo mu povie, na ktorú úroveň spustenia sa má zmeniť.

Riadiace úrovne 0 , 1 a 6 sú vyhradené. Runlevel 0 sa používa na zastavenie systému, úroveň spustenia 6 sa používa na reštartovanie systému a úroveň chodu 1 sa používa na presun systému do režimu jedného používateľa. Runlevel S nie je určený na použitie priamo, ale skôr pre skripty, ktoré sa vykonávajú pri vstupe do úrovne runlevel 1. Ďalšie informácie o tom nájdete v manuáloch na vypnutie (8) a inittab (5).

Riadiace úrovne 7-9 sú tiež platné, hoci nie sú skutočne zdokumentované. Je to preto, že "tradičné" varianty Unix ich nepoužívajú. V prípade, že ste zvedaví, úrovne runes S a s sú v skutočnosti rovnaké. Vnútorne sú to aliasy pre ten istý runlevel.

zavedenie

Po init je vyvolaný ako posledný krok zavádzacej sekvencie jadra, hľadá súbor / etc / inittab a uvidí, či je zadaný typ initdefault (pozri inittab (5)). Vstup initdefault určuje počiatočnú úroveň spustenia systému. Ak takýto záznam neexistuje (alebo žiadny / etc / inittab vôbec), musí byť zadaná úroveň behu na systémovej konzole.

Runlevel S alebo s prinášajú systém do režimu jedného používateľa a nevyžadujú súbor / etc / inittab . V režime jedného používateľa sa na / dev / konzole otvorí koreňový shell.

Pri vstupe do režimu jedného používateľa init prečíta stavy ioctl (2) konzoly z /etc/ioctl.save . Ak tento súbor neexistuje, init inicializuje riadok pri 9600 baudoch a nastaveniach CLOCAL . Keď init opustí režim jedného používateľa, ukladá v tomto súbore nastavenia konzoly ioctl, aby ich mohol znovu použiť pre ďalšiu reláciu pre jedného používateľa.

Pri prvom vstupe do režimu pre viacerých používateľov init vykoná bootovacie a bootwaitové záznamy, aby umožnil pripojenie súborových systémov skôr, ako sa môžu používatelia prihlásiť. Potom sa spracujú všetky položky zodpovedajúce úrovni spustenia.

Pri spustení nového procesu init najskôr skontroluje, či súbor / etc / initscript existuje. Ak áno, použije tento skript na spustenie procesu.

Zakaždým, keď dieťa končí, init zaznamená skutočnosť a dôvod, prečo zomrel v / var / run / utmp a / var / log / wtmp za predpokladu, že tieto súbory existujú.

Zmena úrovní chodu

Po tom, ako splnil všetky uvedené procesy, init čaká na zomretie jedného zo svojich postupov v postavení, signálu napájania, alebo pokiaľ nie je signalizovaný telinitom, aby zmenil úroveň chodu systému. Ak nastane jedna z uvedených troch podmienok, prekontroluje súbor / etc / inittab . Do tohto súboru môžete kedykoľvek pridať nové položky. Init však stále čaká na to, aby nastala jedna z uvedených troch podmienok. Ak chcete poskytnúť okamžitú odpoveď, príkaz telinit Q alebo q sa môže prebudiť na inicializáciu súboru / etc / inittab .

Ak init nie je v režime jedného používateľa a prijíma signál SIGPWR, číta súbor / etc / powerstatus . Potom spustí príkaz založený na obsahu tohto súboru:

F (AIL)

Napájanie zlyhalo, zariadenie UPS poskytuje energiu. Vykonajte položky Powerwait a Powerfail .

O (K)

Napájanie bolo obnovené, vykonať položky powerokwait .

L (OW)

Napájanie je nedostatočné a napájač má nízku kapacitu batérie. Vykonajte položky powerfailnow .

Ak / etc / powerstatus neexistuje alebo obsahuje nič iné ako písmená F , O alebo L , init sa bude chovať tak, akoby prečítal písmeno F.

Využívanie SIGPWR a / etc / powerstatus sa odrádza. Niekto, kto chce interagovať s initom, by mal použiť kanál / dev / initctl - pozri zdrojový kód balíka sysvinit, ktorý vám poskytne ďalšiu dokumentáciu.

Keď sa inicializácia vyžaduje, aby zmenila úroveň spustenia, vyšle varovný signál SIGTERM do všetkých procesov, ktoré nie sú definované na novej úrovni spustenia. Potom čaká 5 sekúnd, kým tieto procesy násilne ukončia prostredníctvom signálu SIGKILL . Všimnite si, že init predpokladá, že všetky tieto procesy (a ich potomkovia) zostávajú v rovnakej skupine procesov, ktoré pôvodne vytvorili pre nich. Ak niektorý proces zmení svoju priradenie k procesnej skupine, nedostane tieto signály. Takéto procesy je potrebné ukončiť oddelene.

telinit

/ sbin / telinit je prepojený s / sbin / init . Vyžaduje jeden-znakový argument a signalizuje init, aby vykonal príslušnú akciu. Nasledujúce argumenty slúžia ako smernice na telinit :

0 , 1 , 2 , 3 , 4 , 5 alebo 6

informujte init, že prejdete na určenú úroveň spustenia.

a , b , c

povoľte initovi spracovávať iba tie položky súboru / etc / inittab, ktoré majú riadiacu úroveň a , b alebo c .

Q alebo q

povoľte initovi znova preskúmať súbor / etc / inittab .

S alebo s

povoľte init prejsť do režimu jedného používateľa.

U alebo u

povedzte init, aby sa znovu vykonal sám (zachovanie stavu). Neprekontroluje sa súbor / etc / inittab . Spustiť úroveň by mala byť jedna z Ss12345 , inak žiadosť by bola mlčky ignorovaná.

telinit môže tiež povedať, init, ako dlho by mala čakať medzi odosielaním signálov SIGTERM a SIGKILL. Predvolená hodnota je 5 sekúnd, ale je možné ju zmeniť pomocou možnosti -t sec .

telinit môžu byť vyvolávané iba používateľmi s príslušnými oprávneniami.

Init binárna kontrola, ak je init alebo telinit, keď sa pozrie na jeho ID procesu ; identifikácia procesu skutočného initu je vždy 1 . Z toho vyplýva, že namiesto toho, aby sme zavolali telinitu, je možné použiť init ako skratku.