Kako uporabljati ukaz Init v Linuxu

Init je staršev vseh procesov. Njena primarna naloga je ustvariti procese iz skripte, shranjene v datoteki / etc / inittab (glej inittab (5)). Ta datoteka ponavadi vsebuje vnose, ki povzročijo init, da se v gornjem stolpcu , na katerega se lahko prijavijo, sprosti getty s. Prav tako nadzoruje avtonomne procese, ki jih zahteva kateri koli določen sistem.

Stopnice

Runlevel je programska konfiguracija sistema, ki omogoča, da obstaja samo izbrana skupina procesov. Postopki, ki jih sproži init za vsako od teh podprogramov, so definirani v datoteki / etc / inittab . Init je lahko v enem od osmih podprogramov: 0-6 in S ali s . Stopnja koraka se spremeni s tem, da ima prednostni uporabnik, ki vodi telinit , ki pošilja ustrezne signale za inicializacijo , in pove, na kateri ravni se spremeni.

Vodiči 0 , 1 in 6 so rezervirani. Runlevel 0 se uporablja za zaustavitev sistema, za izvedbo ponovnega zagona sistema uporabimo nivo izvajanja 6, za izvajanje sistema pa v ravni en uporabnik. Runlevel S ni namenjen neposredni uporabi, temveč več za skripte, ki se izvedejo ob vstopu v izvedenko 1. Za več informacij o tem glejte odprte strani za zaustavitev (8) in inittab (5).

Pravilniki 7-9 so prav tako veljavni, čeprav niso resnično dokumentirani. To je zato, ker jih tradicionalne različice Unixa ne uporabljajo. V primeru, da ste radovedni, so ravni S in S v resnici enaki. Notranji so vzdevki za isto potezo.

Booting

Potem, ko se inicializira kot zadnji korak zaporedja zagonskega jedra, i / etc / inittab išče datoteko initdefault (glej inittab (5)). Vnos initdefault določa začetno stopnjo delovanja sistema. Če takega vnosa ni (ali sploh ni / etc / inittab ), je treba na sistemski konzoli vnesti nivo izvajanja.

Runlevel S ali s prinašajo sistem v enopostopni način in ne zahtevajo datoteke / etc / inittab . V načinu za en uporabnik se na konzoli / dev / konzoli odpre korenska lupina.

Pri vstopu v enopostopni način, init prebere stanja ioctl (2) konzole iz /etc/ioctl.save . Če ta datoteka ne obstaja, init inicializira črto na 9600 baud in nastavitvah CLOCAL . Ko init zapusti en sam uporabniški način, v tej datoteki shrani nastavitve ioctl konzole, tako da jih lahko znova uporabite za naslednjo sejo posameznega uporabnika.

Ko prvič vnašate v večuporabniški način, init izvaja vnose za zagon in zagon bootwait, da omogoči namestitev datotečnih sistemov, preden se lahko uporabniki prijavijo. Potem se obdelajo vsi vnosi, ki ustrezajo ravni izvajanja.

Pri zagonu novega postopka, init najprej preveri, ali obstaja datoteka / etc / initscript . Če to naredi, to skripto uporabi za začetek postopka.

Vsakič, ko otrok konča, init zapiše dejstvo in razlog, zakaj je umrl v / var / run / utmp in / var / log / wtmp , pod pogojem, da te datoteke obstajajo.

Spreminjanje nivojev delovanja

Ko je ustvaril vse navedene postopke, init pričakuje, da bo eden od njenih procesov potomcev umrl, signala moči, ali dokler ga ne bo signaliziral telinit, da bi spremenili sistemsko stopnjo delovanja. Ko pride do enega od zgornjih treh pogojev, ponovno pregleda datoteko / etc / inittab . V to datoteko lahko kadarkoli dodate nove vnose. Vendar pa init še vedno čaka na enega od zgornjih treh pogojev. Za takojšen odziv lahko telinit Q ali q ukaz zbudi init, da ponovno pregleda datoteko / etc / inittab .

Če init ni v načinu enojnega uporabnika in sprejema signale moči (SIGPWR), bere datoteko / etc / powerstatus . Nato začne ukaz, ki temelji na vsebini te datoteke:

F (AIL)

Napajanje ne deluje, UPS zagotavlja moč. Izvedite vpisi za vklop in vklop .

V REDU)

Napajanje je bilo obnovljeno, izvršite vnose powerookwait .

L (OW)

Napajanje ne deluje in UPS ima nizko baterijo. Izvedite vnose powerfailnow .

Če / etc / powerstatus ne obstaja ali vsebuje kaj drugega, se bodo črke F , O ali L , init, obnašale, kot da bi prebrale črko F.

Uporaba SIGPWR in / etc / powerstatus je odvrača. Nekdo, ki želi interaktivno sodelovati z initom, bi moral uporabljati nadzorni kanal / dev / initctl - oglejte si izvorno kodo paketa sysvinit za več dokumentov o tem.

Ko zahteva init , da spremeni izvedeno stopnjo , pošlje opozorilni signal SIGTERM vsem procesom, ki v novem nivoju niso definirani. Nato čaka 5 sekund, preden jih prisilno zaključi prek signala SIGKILL . Upoštevajte, da init predpostavlja, da vsi ti procesi (in njihovi potomci) ostanejo v isti procesni skupini, ki je bila prvotno ustvarjena zanje. Če kateri koli proces spremeni svojo procesno pripadnost, ne bo prejel teh signalov. Takšne procese je treba zaključiti ločeno.

Telinit

/ sbin / telinit je povezan s / sbin / init . Za izvedbo ustreznega ukrepa potrebuje enopredmetni argument in signal init . Naslednji argumenti služijo kot smernice za telinit :

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

povejte init, da preklopite na določeno raven.

a , b , c

povejte init, da obdeluje samo tiste datoteke / etc / inittab, ki imajo lastnosti a , b ali c .

Q ali q

povej init, da ponovno preuči datoteko / etc / inittab .

S ali s

povejte init, da preklopite na enoposteljni način.

U ali u

povej init, da se ponovno izvrši (ohranitev države). Ne pride do ponovnega pregleda datoteke / etc / inittab . Run ravni bi moral biti eden od Ss12345 , sicer bi zahtevo bi bilo tiho prezrta.

telinit lahko tudi pove init, kako dolgo naj počaka med pošiljanjem procesov, ki jih signalizira SIGTERM in SIGKILL. Privzeta vrednost je 5 sekund, vendar je to mogoče spremeniti z možnostjo -t sec .

telinit lahko uveljavljajo samo uporabniki z ustreznimi privilegiji.

Inicialni binarni pregledi, če je v inicializiranem ali telinitskem pogledu s pogledom na njegov identifikacijski proces ; ID procesa v procesu init je vedno 1 . Iz tega sledi, da lahko namesto klicanja telinita uporabite tudi init kot bližnjico.