Kako koristiti Init naredbu u Linuxu

Init je roditelj svih procesa. Njegova je glavna uloga stvaranje procesa iz skripte pohranjene u datoteci / etc / inittab (vidi inittab (5)). Ova datoteka obično sadrži unose koji uzrokuju da se u svakoj liniji genetiraju gettyovi, a korisnici se mogu prijaviti. Također kontrolira autonomne procese koji zahtijevaju neki određeni sustav.

Runlevels

Runlevel je softverska konfiguracija sustava koja omogućuje da postoji samo odabrana skupina procesa. Procesi koji su pokrenuli init za svaki od tih runlevelova definirani su u / etc / inittab datoteci. Init može biti u jednoj od osam runlevelova: 0-6 i S ili s . Runlevel se mijenja tako da ima povlašteni korisnik pokrenuti telinit , koji šalje odgovarajuće signale u init , govoreći koji runlevel za promjenu.

Rezervni brojevi 0 , 1 i 6 su rezervirani. Runlevel 0 se koristi za zaustavljanje sustava, runlevel 6 se koristi za ponovno pokretanje sustava, a runlevel 1 se koristi za postizanje sustava u pojedinačni korisnički mod. Runlevel S ne treba izravno koristiti, ali više za skripte koje se izvršavaju pri ulasku u runlevel 1. Za više informacija o tome pogledajte manpages for shutdown (8) i inittab (5).

Valjane su i razine ranosa 7-9, iako nisu stvarno dokumentirane. To je zato što ih "tradicionalne" Unix inačice ne koriste. U slučaju da ste znatiželjni, usponske S i S su zapravo iste. Unutarnji su oni aliasi za istu konkurenciju.

Dizanje

Nakon što se init zove kao zadnji korak slijeda podizanja kernela, traži datoteku / etc / inittab da vidi postoji li unos vrste initdefault (vidi inittab (5)). Initdefault unos određuje početno runlevel sustava. Ako takav unos nema (ili ne postoji / etc / inittab uopće), na sistemskoj konzoli se mora unijeti runlevel.

Runlevel S ili s donosi sustav u jedan korisnički mod i ne zahtijeva datoteku / etc / inittab . U pojedinačnom načinu rada, korijenska ljuska se otvara na / dev / konzoli .

Prilikom unosa jednog korisničkog moda, init čita statičke (2) stanja konzole iz /etc/ioctl.save . Ako ova datoteka ne postoji, init inicializira liniju na 9600 baudu i CLOCAL postavkama. Kada init napusti pojedinačni način rada, pohranjuje postavke ioctl konzole u tu datoteku kako bi ih ponovno upotrijebila za sljedeću sesiju jednog korisnika.

Prilikom prvog ulaska u multi-user modus, init izvodi unose za podizanje i podizanje čekanja kako bi se omogućilo instaliranje datotečnih sustava prije nego što se korisnici mogu prijaviti. Zatim se obrađuju svi unosi koji se podudaraju s runlevelom.

Kada pokrenete novi postupak, init prvo provjerava postoji li datoteka / etc / initscript . Ako se to dogodi, koristi ovu skriptu za pokretanje postupka.

Svaki put kada dijete prekine, init bilježi činjenicu i razlog zbog kojeg je umro u / var / run / utmp i / var / log / wtmp , pod uvjetom da te datoteke postoje.

Promjena visine uspona

Nakon što je stvorio sve navedene procese, init čeka da jedan od njegovih potomnih procesa umre, signal powerfail, ili dok se ne signalizira telinit da promijeni sistemsku ravnotežu sustava. Kada se pojavi jedan od gore navedenih uvjeta, ponovno pregledava datoteku / etc / inittab . U ovu datoteku možete dodati nove unose u bilo kojem trenutku. Međutim, init i dalje čeka da se pojavi jedan od gore navedenih tri uvjeta. Kako bi se dobio trenutni odgovor, naredba telinit Q ili q može se probuditi i ponovno ispitati / etc / inittab datoteku.

Ako init nije u načinu pojedinačnog korisnika i prima signal powerfail (SIGPWR), on čita datoteku / etc / powerstatus . Zatim započinje naredbu koja se temelji na sadržaju ove datoteke:

IZNEVJERITI)

Snaga je u nedostatku, UPS pruža snagu. Izvršite stavke powerwait i powerfail .

U REDU)

Snaga je obnovljena, izvršavajte zapise powerokwait .

L (OW)

Snaga je u nedostatku i UPS ima slabu bateriju. Izvršite powerfailnow zapise.

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

Uporaba SIGPWR i / etc / powerstatusa je obeshrabrena. Netko tko želi komunicirati s initom treba koristiti / dev / initctl upravljački kanal - pogledajte izvorni kod sysvinit paketa za više dokumentacije o tome.

Kada se init traži da promijeni runlevel, on šalje signal upozorenja SIGTERM svim procesima koji su nedefinirani u novom runlevelu. Zatim čeka 5 sekundi prije nego što prisilno prekine te procese putem SIGKILL signala. Napominjemo da init pretpostavlja da svi ti procesi (i njihovi potomci) ostaju u istoj procesnoj skupini koja je init izvorno stvorila za njih. Ako neki proces mijenja pripadnost procesne skupine, neće primati te signale. Takvi postupci moraju biti rastavljeni odvojeno.

Telinit

/ sbin / telinit povezan je s / sbin / init . Potrebno je argument s jednim znakom i signalizira init da izvrši odgovarajuću radnju. Sljedeći argumenti služe kao smjernice za telinit :

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

reći init da se prebaci na navedenu razinu trčanje.

a , b , c

recite init da obradi samo those / etc / inittab datoteke koje imaju runlevel a , b ili c .

Q ili q

recite init da ponovno pregledate / etc / inittab datoteku.

S ili s

reći init za prebacivanje na jedan korisnički način.

U ili u

reći init da se ponovno izvrši (očuvanje države). Nema ponovnog ispitivanja datoteke / etc / inittab . Trčanje razini trebao bi biti jedan od Ss12345 , inače će se zahtjev tiho zanemariti.

telinit također može reći koliko dugo treba čekati između slanja procesa signala SIGTERM i SIGKILL. Zadana je 5 sekundi, ali to se može promijeniti s opcijom -t sec .

telinit mogu se pozvati samo korisnici s odgovarajućim privilegijama.

Init binarni provjerava je li init ili telinit gledajući njegov ID procesa ; pravi initov ID procesa je uvijek 1 . Iz toga slijedi da umjesto pozivanja telinitova, umjesto umjesto umjesto prečice, također možete koristiti init .