Kako koristiti Init Command u Linuxu

Init je roditelj svih procesa. Njegova primarna uloga je stvaranje procesa iz skripte sačuvane u fajlu / etc / inittab (vidi inittab (5)). Ovaj fajl obično sadrži unose koji izazivaju init da gutaju geta na svakoj liniji koju korisnici mogu prijaviti. Takođe kontroliše autonomne procese koje zahtijeva bilo koji određeni sistem.

Runlevels

Runlevel je softverska konfiguracija sistema koja omogućava da postoji samo odabrana grupa procesa. Procesi nastali po init-u za svaki od ovih procedura su definirani u fajlu / etc / inittab . Init može biti u jednoj od osam nivoa izvođenja: 0-6 i S ili s . Radna površina se menja tako što je privilegovan korisnik pokrenuo telinit , koji šalje odgovarajuće signale u inicijativu , govoreći o kojem se radnom nivou promijeni.

Radni redovi 0 , 1 i 6 su rezervisani. Runlevel 0 se koristi da zaustavi sistem, radni nivo 6 se koristi za restartovanje sistema, a radni nivo 1 se koristi da bi sistem bio u režimu jednog korisnika. Runlevel S zaista nije namenjen direktnom korišćenju, već više za skripte koje se izvršavaju prilikom unosa nivoa 1. Za više informacija o tome pogledajte odlomke za isključivanje (8) i inittab (5).

Valjci 7-9 takođe važe, mada nisu zaista dokumentovani. To je zato što ih "tradicionalne" Unix varijante ne koriste. U slučaju da ste radoznali, radna kola S i s su zapravo jednaka. Interno su oni aliasovi za isti runlevel.

Pokretanje

Nakon init se poziva kao poslednji korak sekvence boot kernela, traži se datoteka / etc / inittab da bi se videlo da li postoji unos tipa initdefault (vidi inittab (5)). Initdefault unos određuje početni nivo rada sistema. Ako takav unos (ili nema / etc / inittab ) uopšte nije dostupan, na sistemskoj konzoli se mora uneti radni nivo.

Runlevel S ili s dovode sistem u jednostruki korisnički režim i ne zahtevaju datoteku / etc / inittab . U režimu jednog korisnika, korijena ljuska se otvara na / dev / konzoli .

Prilikom unosa pojedinačnog korisničkog režima, init čita stanja ioctl (2) konzole iz /etc/ioctl.save . Ako ova datoteka ne postoji, init inicijalizuje liniju na 9600 baud i sa podešavanjima CLOCAL . Kada inicijativa ostavi pojedinačni korisnički režim, ona čuva podešavanja ioctl konzole u ovoj datoteci, tako da ih može ponovo koristiti za sledeću sesiju s jednim korisnikom.

Kada prvi put unosite višekorisnički režim, init izvršava stavke za pokretanje i pokretanje bootwait-a kako bi omogućio instaliranje datoteka datoteka prije nego što se korisnici mogu prijaviti. Zatim se obrađuju svi unosi koji odgovaraju obradnom nivou.

Kada započne novi proces, init prvo proverava da li postoji datoteka / etc / initscript . Ako to uradi, koristi ovu skriptu da započne proces.

Svaki put kada se dijete prekida, init zabilježi činjenicu i razlog zbog kojeg je umro u / var / run / utmp i / var / log / wtmp , pod uslovom da ove datoteke postoje.

Promena nivoa rada

Nakon što je pokrenuo sve navedene postupke, init čeka jedan od njegovih potomaka da umru, signal snage ili dok ga telinit ne signalizira da bi promijenio radni sistem sistema. Kada se pojavi jedan od gore navedenih tri stanja, ponovo preispita datoteku / etc / inittab . Novi unosi se mogu dodati u ovu datoteku u bilo kom trenutku. Ipak, init i dalje čeka jedan od gore navedenih tri uslova. Da bi se obezbedio trenutni odgovor, naredba telinit Q ili q može probuditi init za preispitivanje datoteke / etc / inittab .

Ako inicijativa nije u režimu pojedinačnog korisnika i prima signal snage (SIGPWR), ona čita datoteku / etc / powerstatus . Zatim započinje komanda zasnovana na sadržaju ove datoteke:

F (AIL)

Snaga ne uspeva, UPS obezbeđuje snagu. Izvršite unose za powerwait i powerfail .

UREDU)

Snaga je obnovljena, izvršite unose powerokwait .

L (OW)

Snaga ne radi, a UPS ima malu bateriju. Izvršite stavke powerfailnow .

Ako / etc / powerstatus ne postoji ili sadrži bilo šta drugo, slova F , O ili L , init će se ponašati kao da je pročitala slovo F.

Upotreba SIGPWR i / etc / powerstatus je obeshrabrena. Neko ko želi da stupi u interakciju sa init-om treba da koristi kanal za kontrolu / dev / initctl - pogledajte izvorni kod paketa sysvinit za više dokumentacije o tome.

Kada se inicijativa zahteva da promijeni radni nivo, on šalje signal upozorenja SIGTERM svim procesima koji su nedefinisani u novom radnom kolonu . Zatim čeka 5 sekundi pre prisilnog prekida ovih procesa preko SIGKILL signala. Imajte na umu da init pretpostavlja da svi ovi procesi (i njihovi potomci) ostaju u istoj procesnoj grupi koja je prvobitno stvorena za njih. Ako bilo koji proces menja svoju grupnu pripadnost procesu, neće primiti ove signale. Takvi procesi moraju biti završeni zasebno.

Telinit

/ sbin / telinit je povezan s / sbin / init . Potreban je argument sa jednim znakom i signali init za obavljanje odgovarajuće akcije. Sledeći argumenti služe kao direktiva za telinit :

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

reći init da pređe na određeni nivo rada.

a , b , c

reci init da obradi samo one unose datoteke / etc / inittab koji imaju radni nivo a , b ili c .

Q ili q

reći init da ponovo ispitate datoteku / etc / inittab .

S ili s

reći init da se prebacuje na pojedinačni korisnik.

U ili u

reći init da se ponovo izvrši (očuvanje države). Ne preispituje se datoteka / etc / inittab . Run nivo bi trebao biti jedan od Ss12345 , u suprotnom bi zahtev bio tiho zanemaren.

telinit takođe može reći init koliko dugo treba da čeka između procesa slanja signala SIGTERM i SIGKILL. Podrazumevana vrednost je 5 sekundi, ali to se može promeniti opcijom -t sec .

telinit mogu pozivati ​​samo korisnici sa odgovarajućim privilegijama.

Init binarni provjerava da li je init ili telinit gledanjem njegovog ID procesa ; id procesa inicijalnog init -a je uvek 1 . Iz ovoga proizilazi da umesto pozivanja telinita može se koristiti i init umjesto kao prečica.