Kaip naudoti Init komandą Linux

Init yra visų procesų tėvas. Jo pagrindinis vaidmuo yra kurti procesus iš scenarijaus, saugomo failo / etc / inittab (žr. Inittab (5)). Šiame faile paprastai yra įrašų, dėl kurių init gali sukelti gatvių atsiradimą kiekvienoje eilutėje, kurią naudotojai gali prisijungti. Ji taip pat valdo bet kokios sistemos reikalaujamus autonominius procesus.

Runlevels

Darbo lygis yra sistemos programinės įrangos konfigūracija, kuri leidžia tiktai pasirinktai procesų grupei egzistuoti. Kiekvieno iš šių lygių nustatymo procesai, kuriuos generuoja init , yra apibrėžti failo / etc / inittab . Init gali būti viename iš aštuonių lygių: 0-6 ir S arba s . Darbo lygis pakeičiamas privilegijuotu vartotojo paleisti telinit , kuris siunčia atitinkamus signalus init , nurodydamas, kokį veikimo lygį reikia pakeisti.

0 , 1 ir 6 veikimo lygiai yra rezervuoti. "Runlevel 0" naudojamas sistemos sustabdymui, sistemos paleisties lygis 6 naudojamas sistemos paleidimui, o sistemos veikimo lygis 1 naudojamas, kad sistema būtų įjungta į vieno vartotojo režimą. "Runlevel S" iš tikrųjų nėra skirtas tiesiogiai naudoti, bet labiau scenarijus, kurie paleidžiami įvedant 1 lygį. Daugiau informacijos apie tai žr. " Shutdown" (8) ir inittab (5) puslapiuose .

Veiksmų lygiai 7-9 taip pat galioja, nors ir nėra dokumentuojami. Taip yra todėl, kad "tradiciniai" Unix variantai jų nenaudoja. Jei jus domina, "run" lygiai " S" ir " s" iš tikrųjų yra vienodi. Viduje jie yra slapyvardžiai ta pačia darbo eiga.

Paleisti

Kai init yra paskambinama kaip paskutinė branduolio įkrovos sekos pakopa, ji ieško failo / etc / inittab, kad įsitikintumėte, ar yra įrašas tipo initdefault (žr. Inittab (5)). Initdefault įrašas nustato pradinį sistemos paleidimo lygį. Jei tokio įrašo nėra (arba ne visi / etc / inittab ), sistemos konsolėje reikia įvesti paleidimo lygį.

"Runlevel S" arba " S " sistema įjungia vieno vartotojo režimą ir nereikalauja / etc / inittab failo. Vieno vartotojo režimu root / shell atidaromas / dev / console .

Įvedant vieno vartotojo režimą, init skaito konsolės ioctl (2) būsenas iš /etc/ioctl.save . Jei šis failas neegzistuoja, init inicijuoja liniją 9600 bodu ir CLOCAL nustatymus. Kai init palieka vieno vartotojo režimą, jis išsaugo konsolės ioctl nustatymus šiame faile, kad jis galėtų pakartotinai juos naudoti kito vieno vartotojo seanso metu.

Įvedus daugiafunkcinį režimą pirmą kartą, " init" atlieka įkrovos ir įkrovos įrašus, kad būtų galima įdiegti failų sistemas, kol vartotojai galės prisijungti. Tada visi įrašai, atitinkantys darbo lygį, yra apdorojami.

Pradedant naują procesą, init pirmiausia patikrina, ar egzistuoja failas / etc / iniccript . Jei taip, jis naudoja šį scenarijų, kad pradėtų procesą.

Kiekvieną kartą, kai vaikas baigiasi, init įrašo faktą ir priežastį, kodėl jis mirė, / var / run / utmp ir / var / log / wtmp , jei šie failai egzistuoja.

Keisti veikimo lygius

Po to, kai jis sukėlė visus nurodytus procesus, init laukia vieno iš jo palikuonių procesų mirties, powerfail signalo arba tol, kol telinit signalizuos signalą, kad pakeistų sistemos darbo lygį. Kai įvyksta viena iš pirmiau minėtų trijų sąlygų, ji iš naujo analizuoja failą / etc / inittab . Naujus įrašus galite bet kuriuo metu pridėti prie šio failo. Tačiau init vis dar laukia vieno iš pirmiau minėtų trijų sąlygų. Kad būtų galima gauti momentinį atsakymą, komanda telinit Q arba q gali pabusti init, kad iš naujo išnagrinėtų failą / etc / inittab .

Jei init nėra vieno vartotojo režime ir gauna PowerFail signalą (SIGPWR), jis skaito failą / etc / powerstatus . Tada paleidžiama komanda, pagrįsta šio failo turiniu:

F (AIL)

Maitinimas yra nesėkmingas, UPS teikia galią. Vykdykite " powerwait" ir " powerfail" įrašus.

GERAI)

Maitinimas buvo atstatytas, paleidžiamas " powerokwait" įrašai.

L (OW)

Maitinimas trūksta ir UPS turi mažą bateriją. Vykdyti powerfailnow įrašus.

Jei / etc / powerstatus neegzistuoja arba yra nieko kito, tada raidės F , O arba L , init elgsis taip, lyg jis būtų perskaitytas raidė F.

Nenaudokite SIGPWR ir / etc / powerstatus naudojimo. Kažkas, norintis bendrauti su init, turėtų naudoti / dev / initctl valdymo kanalą - daugiau sužinokite apie sysvinit paketo šaltinio kodą.

Kai init prašoma pakeisti veikimo lygį, jis persiunčia įspėjimo signalą SIGTERM visiems procesams, kurie nėra apibrėžti naujame darbo lygyje. Tada jis laukia 5 sekundžių, kol priverstinai nutraukia šiuos procesus per SIGKILL signalą. Atkreipkite dėmesį, kad " init" daro prielaidą, kad visi šie procesai (ir jų palikuonys) lieka toje pačioje procesų grupėje, kuri iš pradžių jiems sukurta. Jei kuris nors procesas pakeičia proceso grupės priklausomybę, jis negaus šių signalų. Tokie procesai turi būti nutraukti atskirai.

Telinit

/ sbin / telinit yra susijęs su / sbin / init . Jis atlieka vieno simbolio argumentą ir signalus init, kad atliktų tinkamą veiksmą. Šie argumentai tarnauja kaip nurodymai telinit :

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

pasakykite init, kad pereitumėte prie nurodyto paleidimo lygio.

a , b , c

pasakykite init, kad apdorotų tik tuos / etc / inittab failo įrašus, kurių veikimo lygis a , b arba c .

Q arba q

pasakykite init, kad pakartotinai peržiūrėtumėte failą / etc / inittab .

S arba s

pasakykite init, kad pereitumėte į vieno vartotojo režimą.

U arba tu

pasakyk init, kad pats atliktumėte save (išsaugojęs valstybę). Failo / etc / inittab persvarstymas nevyksta. Paleidimo lygis turėtų būti vienas iš Ss12345 , kitaip prašymas būtų tyliai ignoruojamas.

Telinit taip pat gali parodyti, kiek laiko reikia palaukti nuo SIGTERM ir SIGKILL signalų siuntimo procesų. Numatytoji reikšmė yra 5 sekundės, tačiau ją galima keisti su -t sec parinktimi.

Telinit gali būti naudojamas tik su atitinkamomis privilegijomis.

Pirminis dvejetainis patikrinimas, ar jis yra init arba telinit , žiūrėdamas į jo proceso id ; realus init proceso ID visada yra 1 . Iš to išplaukia, kad vietoj skambinimo telinit galima tiesiog naudoti init vietoj nuorodos.