Kā lietot Linux Init komandu

Init ir vecākais no visiem procesiem. Tās primārais uzdevums ir izveidot procesus no skripta, kas saglabāts failā / etc / inittab (skatīt inittab (5)). Šajā failā parasti ir ieraksti, kuru dēļ lietotāji var pieteikties ikvienā rindiņā, kurā lietotāji var pieteikties. Tas arī kontrolē neatkarīgus procesus, kas nepieciešami kādai konkrētai sistēmai.

Runnes līmenis

Darblauks ir sistēmas programmatūras konfigurācija, kas ļauj tikai noteiktām procesu grupām pastāvēt. Procesi, ko rada init katram no šiem darbības līmeņiem, ir definēti failā / etc / inittab . Init var būt vienā no astoņiem darbības režīmiem: 0-6 un S vai s . Darblīmenis tiek mainīts, izmantojot priviliģētu lietotāju palaistu telinit , kas nosūta atbilstošus signālus, lai initētu , norādot, uz kuru izpildes līmeni ir jāmaina.

0 , 1 un 6 izpildes līmenis ir rezervēts. Runlevel 0 tiek izmantots, lai apturētu sistēmu, izpildes līmenis 6 tiek izmantots, lai sistēma tiktu restartēta, un izpildes līmenis 1 tiek izmantots, lai sistēma kļūtu viena lietotāja režīmā. Runnes līmenis S tiešām nav domāts tieši lietošanai, bet vairāk par skriptiem, kas tiek izpildīti, ievadot 1. izpildes līmeni. Lai iegūtu papildinformāciju par to, skatiet sadaļas shutdown (8) un inittab (5) manpages.

Darblīmeņi 7-9 ir derīgi, taču tie nav īsti dokumentēti. Tas ir tāpēc, ka "tradicionālie" Unix varianti tos neizmanto. Ja jūs interesēties, runnes līmenis S un s patiesībā ir vienādi. Iekšā tie ir pseidonīmi vienam un tam pašam izpildes līmenim.

Atsākšana

Pēc tam, kad init ir izsaukts kā kodola sāknēšanas secības pēdējais solis, tas meklē failu / etc / inittab, lai redzētu, vai ir ieraksts initdefault (skatīt inittab (5)). Initdefault ieraksts nosaka sistēmas sākotnējo darbības līmeni. Ja šāda ieraksta nav (vai vispār nav / etc / inittab ), sistēmas konsole jāievada darbības līmenis.

Runnes līmenis S vai sistēma nodrošina vienotā lietotāja režīmu un neprasa / etc / inittab failu. Viena lietotāja režīmā / dev / console tiek atvērts saknes čaula.

Ienākot vienotā lietotāja režīmā, init nolasa konsoles ioctl (2) stāvokļus no /etc/ioctl.save . Ja šis fails neeksistē, init inicializē līniju ar 9600 baudu un ar CLOCAL iestatījumiem. Kad init atstāj viena lietotāja režīmu, tas saglabā konsoles ioctl iestatījumus šajā failā, lai to varētu atkārtoti izmantot nākamajam viena lietotāja sesijā.

Pirmoreiz ievadot multi-user režīmu, init veic boot un bootwait ierakstus, lai varētu izveidot failu sistēmas, pirms lietotāji var pieteikties. Tad tiek apstrādāti visi ieraksti, kas atbilst izpildes līmenim.

Sākot jaunu procesu, init vispirms pārbauda, ​​vai failam / etc / initscript eksistē. Ja tas notiek, tas izmanto šo skriptu, lai sāktu procesu.

Katru reizi, kad bērns izbeidzas, init reģistrē faktu un iemeslu, kāds tas miris, / var / run / utmp un / var / log / wtmp , ja šie faili pastāv.

Mainīt darbības līmeņus

Pēc tam, kad tas ir radījis visus norādītos procesus, init gaida kādu no tā pēcteča procesiem mirt, powerfail signālu vai līdz brīdim, kad telinit to signalizē, lai mainītu sistēmas darbības līmeni. Kad rodas kāds no iepriekš minētajiem trim nosacījumiem, tas atkārtoti izskata / etc / inittab failu. Jauni ieraksti var tikt pievienoti šim failam jebkurā laikā. Tomēr init joprojām gaida vienu no augstāk minētajiem trim nosacījumiem. Lai nodrošinātu tūlītēju atbildi, komanda telinit Q vai q var pamodināt init, lai atkārtoti pārbaudītu / etc / inittab failu.

Ja init nav viena lietotāja režīmā un saņem powerfail signālu (SIGPWR), tas nolasa failu / etc / powerstatus . Tad sāk komandu, pamatojoties uz šī faila saturu:

F (AIL)

Jauda nedarbojas, UPS nodrošina jaudu. Izpildiet powerwait un powerfail ierakstus.

LABI)

Jauda ir atjaunota, izpildiet powerokwait ierakstus.

L (OW)

Jauda nedarbojas, un UPS ir zems akumulators. Izpildīt powerfailnow ierakstus.

Ja / etc / powerstatus neeksistē vai satur kaut ko citu, tad burtus F , O vai L , init rīkosies tā, it kā tā būtu izlasījusi burtu F.

SIGPWR un / etc / powerstatus lietošana tiek noraidīta. Kāds, kurš vēlas sadarboties ar init, ir jāizmanto / dev / initctl vadības kanāls - skatiet sysvinit paketes avota kodu, lai uzzinātu vairāk par to.

Kad init tiek prasīts mainīt izpildes līmeni, tas brīdinājuma signālu SIGTERM nosūta visiem procesiem, kas jaunajā darbības līmenī nav definēti. Pēc tam tas tiek pagaidīts 5 sekundes, pirms piespiedu kārtā pārtrauc šos procesus, izmantojot SIGKILL signālu. Ievērojiet, ka init pieņem, ka visi šie procesi (un to pēcteči) paliek tajā pašā procesa grupā, kas init sākotnēji tiem radīta. Ja kāds process maina procesa grupas saistību, tas nesaņems šos signālus. Šādi procesi ir jāizbeidz atsevišķi.

Telinit

/ sbin / telinit ir saistīts ar / sbin / init . Lai veiktu atbilstošu darbību, tas ņem vienu rakstzīmi argumentu un signālus init . Tālāk minētie argumenti kalpo kā norādes telinit :

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

pastāstiet init, lai pārslēgtos uz norādīto palaišanas līmeni.

a , b , c

pasakiet init, lai apstrādātu tikai tos / etc / inittab failu ierakstus, kuriem ir a , b vai c izpildes līmenis .

Q vai q

pasakiet init, lai atkārtoti pārbaudītu / etc / inittab failu.

S vai s

pastāstiet init, lai pārslēgtos uz viena lietotāja režīmu.

U vai u

pasaki init, lai atkal izpildītu sevi (saglabājot valsti). Nav notikusi atkārtotā / etc / inittab faila pārbaude. Darbības līmenim jābūt vienam no Ss12345 , jo citādi pieprasījums tiek klusi ignorēts.

telinit var arī pateikt init, cik ilgi jāgaida no SIGTERM un SIGKILL signālu sūtīšanas procesiem. Noklusējums ir 5 sekundes, bet to var mainīt ar -t sec opciju.

Telinit var atsaukties tikai lietotājiem ar atbilstošām privilēģijām.

Init binārās pārbaudes, ja tas ir init vai telinit , aplūkojot tā procesa ID ; reālais init process id vienmēr ir 1 . No tā izriet, ka tā vietā, lai izsauktu telinit, var vienkārši izmantot init kā saīsni.