init

Autres langues

Langue: pl

Autres versions - même langue

Version: 19 lipca 2004 (openSuse - 09/10/07)

Autres sections - même nom

Section: 8 (Commandes administrateur)

NAZWA

init, telinit - sterowanie procesu inicjuj±cego

SK£ADNIA

/sbin/init [ -a ] [ -s ] [ -b ] [ -z xxx ] [ 0123456Ss ]
/sbin/telinit [ -t sekundy ] [ 0123456sSQqabcUu ]

OPIS

Init

Init jest przodkiem wszystkich procesów. Jego g³ównym zadaniem jest stworzenie procesów w oparciu o skrypt zapisany w pliku /etc/inittab (patrz te¿ inittab(5)). Ten plik zawiera zwykle pozycje, które ka¿± procesowi init pomna¿aæ getty na ka¿dej linii, na które u¿ytkownicy mog± siê zalogowaæ. Kontroluje te¿ samodzielne procesy, których istnienie jest konieczne w danym systemie.

POZIOMY PRACY

Runlevel (poziom pracy) jest to konfiguracja oprogramowania systemu, która pozwala zaistnieæ tylko wytypowanym grupom procesów. Procesy tworzone przez init dla ka¿dego z tych poziomów s± zdefiniowane w pliku /etc/inittab. Init mo¿e byæ w jednym z o¶miu poziomów pracy: 0-6 i S lub s. Poziom pracy jest zmieniany przez uruchomienie telinit przez uprzywilejowanego u¿ytkownika. telinit wysy³a odpowiednie sygna³y do init, mówi±ce, w jaki tryb ma przej¶æ.

Tryby pracy 0, 1, oraz 6 s± zarezerwowane. Tryb 0 jest u¿ywany, by zatrzymaæ system, tryb 6, by prze³adowaæ system (reboot), a tryb 1, by wprowadziæ system w tryb pracy jednego u¿ytkownika (single-user mode). Tryb S nie jest pomy¶lany dok³adnie tak, by go u¿ywaæ bezpo¶rednio, lecz raczej dla skryptów wykonywanych przy wchodzeniu w tryb 1. Aby uzyskaæ wiêcej informacji na ten temat, zobacz strony podrêcznika dla shutdown(8) i inittab(5).

Tryby pracy 7-9 te¿ s± poprawne, choæ niezbyt udokumentowane. To z powodu "tradycyjnych" wariantów Uniksa nie u¿ywaj±cych ich. Je¶li jeste¶ ciekaw, to wiedz, ¿e poziomy S i s s± w rzeczywisto¶ci takie same. Wewnêtrznie s± to tylko zastêpcze nazwy dla takich samych trybów pracy.

BOOTOWANIE

Po tym jak init jest wywo³any w ostatnim kroku sekwencji bootuj±cej j±dra, szuka pliku /etc/inittab w celu znalezienia w nim pola typu initdefault (patrz te¿ inittab(5)). Pole initdefault okre¶la pocz±tkowy poziom pracy systemu. Je¶li nie ma tam takiego pola (lub wcale nie istnieje /etc/inittab), poziom pracy musi byæ podany z konsoli systemowej.

Poziom S lub s wprowadza system w tryb jednego u¿ytkownika i nie wymaga pliku /etc/initttab. W trybie jednego u¿ytkownika, wywo³ywany jest /sbin/sulogin na urz±dzeniu /dev/console.

Podczas wchodzenia w tryb jednego u¿ytkownika, proces init inicjuje ustawienia stty konsoli na bezpieczne warto¶ci. Ustawiany jest tryb clocal. Prêdko¶æ sprzêtu i handshaking nie s± zmieniane.

Podczas wchodzenia w tryb wielu u¿ytkowników po raz pierwszy, init wykonuje pozycje boot i bootwait, by pozwoliæ systemom plików zamontowaæ siê zanim u¿ytkownicy bêd± mogli siê zalogowaæ. Potem wykonywane s± wszystkie pozycje przypisane danemu poziomowi pracy.

Kiedy nowy proces startuje, init sprawdza najpierw, czy istnieje plik /etc/initscript. Je¶li tak, u¿ywa tego skryptu by ten proces zacz±æ.

Za ka¿dym razem, gdy proces potomny siê zakoñczy, init zapamiêtuje ten fakt i powód ¶mierci procesu jest zapisany w /var/run/utmp i /var/log/wtmp, pod warunkiem, ¿e te pliki istniej±.

ZMIENIANIE TRYBÓW PRACY

Po tym jak "namno¿one" zostan± wszystkie wyszczególnione procesy, init czeka na ¶mieræ ka¿dego swojego procesu potomnego, sygna³ braku energii lub zasygnalizowanie przez telinit zmiany poziomu dzia³ania systemu. Gdy wyst±pi jeden spo¶ród tych trzech warunków, ponownie sprawdzany jest plik /etc/inittab, poniewa¿ nowe pola mog± byæ do niego dodane w ka¿dej chwili. Jednakowo¿, init wci±¿ oczekuje na wyst±pienie jednego z tych trzech warunków. By przygotowaæ siê na natychmiastow± odpowied¼, telinit Q albo u¿yta komenda q mo¿e obudziæ proces init, by jeszcze raz przeczyta³ plik /etc/inittab.

Je¶li init nie jest w trybie jednego u¿ytkownika i odbiera sygna³ zaniku energii (SIGPWR), czyta plik /etc/powerstatus. Nastêpnie uruchamia polecenie zale¿ne od zawarto¶ci tego pliku:

F(AIL)
Zawodzi zasilanie, UPS dostarcza mocy. Wykonuje wpisy powerwait i powerfail.
O(K)
Zasilanie powróci³o, uruchamia wpisy powerokwait.
L(OW)
Zasilanie zawodzi, a UPS-owi wyczerpuje siê bateria. Wykonuje wpisy powerfailnow.

Je¿eli plik /etc/powerstatus nie istnieje lub zawiera cokolwiek innego ni¿ jedn± z liter F, O lub L, init zachowa siê tak, jakby przeczyta³ F.

U¿ywanie SIGPWR i /etc/powerstatus nie jest zalecane. Je¿eli kto¶ chce wspó³dzia³aæ z init-em, powinien u¿yæ kana³u kontroli /dev/initctl - proszê przeczytaæ kod ¼ród³owy pakietu sysvinit po wiêcej dokumentacji dotycz±cej tego kana³u.

Gdy init jest proszony o zmianê poziomu dzia³ania, wysy³a sygna³ ostrzegawczy SIGTERM do wszystkich procesów, które nie s± zdefiniowane w nowym poziomie pracy. Potem czeka 5 sekund zanim "na si³ê" zakoñczy te procesy poprzez sygna³ SIGKILL. Zauwa¿, ¿e init zak³ada, ¿e wszystkie te procesy (i ich potomki) pozostaj± w tej samej grupie procesów, któr± init oryginalnie im utworzy³. Je¿eli jakikolwiek proces zmieni³ sw± przynale¿no¶æ do grupy procesów to nie odbierze tych sygna³ów. Tego typu procesy musz± byæ koñczone osobno (np. demony wszelakie - przyp. t³um.).

TELINIT

/sbin/telinit jest symbolicznym dowi±zaniem do /sbin/init. Pobiera on jednoznakowy argument i sygna³y init, by podj±³ stosowne dzia³anie. Poni¿sze argumenty mo¿na stosowaæ jako rozkazy dla telinit:
0,1,2,3,4,5 lub 6
mówi± procesowi init by prze³±czy³ w odpowiedni poziom dzia³ania.
a,b,c
ka¿± procesowi init by przetwarza³ tylko te pola pliku /etc/inittab, które odnosz± siê do poziomu pracy a,b lub c.
Q lub q
ka¿± procesowi init jeszcze raz przeczytaæ plik /etc/inittab.
S lub s
mówi± ¿eby init prze³±czy³ w tryb jednego u¿ytkownika.
U lub u
ka¿± procesowi init prze³adowaæ siê (zachowuj±c obecny stan). Nie wystêpuje ponowne odczytywanie pliku /etc/inittab. Poziom pracy powinien byæ ustawiony na Ss12345, w przeciwnym wypadku ¿±danie mo¿e byæ "delikatnie" zignorowane.

telinit mo¿e tak¿e powiedzieæ procesowi init, jak d³ugo powinien on czekaæ miêdzy wysy³aniem sygna³ów SIGTERM i SIGKILL. Domy¶ln± warto¶ci± jest 5 sekund, ale mo¿e byæ ona zmieniona za pomoc± opcji -t sekundy.

telinit mo¿e byæ wywo³ywany tylko przez u¿ytkowników uprzywilejowanych.

Wywo³any init sprawdza czy jest procesem inicjuj±cym init czy te¿ jest wywo³any jako telinit poprzez wgl±d w swój identyfikator procesu; prawdziwy identyfikator procesu init ma zawsze warto¶æ 1. Teraz ju¿ wiadomo, ¿e zamiast wywo³ywaæ telinit mo¿esz te¿ po prostu u¿yæ init, a nie skrótu.

¦RODOWISKO

Init ustawia nastêpuj±ce zmienne ¶rodowiskowe dla wszystkich swoich dzieci:
PATH
/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin
INIT_VERSION
Jak mówi nazwa - wersja programu. U¿yteczne dla okre¶lenia, je¶li skrypt uruchamia siê bezpo¶rednio z init.
RUNLEVEL
Obecny poziom pracy systemu.
PREVLEVEL
Poprzedni poziom pracy systemu (u¿yteczne po zmianie poziomów).
CONSOLE
Konsola systemu. Tak naprawdê ta warto¶æ jest przyjmowana od j±dra; jednak je¶li nie jest ustawiona init ustawi j± domy¶lnie na /dev/console.

FLAGI STARTOWE

Jest mo¿liwe by przekazaæ pewne flagi do procesu init z monitora startowego (np. LILO). Init dopuszcza stosowanie nastêpuj±cych flag:
S, single
Bootowanie w trybie jednego u¿ytkownika. W tym trybie /etc/inittab jest sprawdzany (wczytywany) i skrypty startowe rc s± zwykle uruchamiane zanim wystartuje pow³oka dla trybu jednego u¿ytkownika.
1-5
Poziom dzia³ania w jakim system ma wystartowaæ.
-b, emergency
Wej¶cie bezpo¶rednio w tryb jednego u¿ytkownika bez uruchamiania ¿adnych innych skryptów startowych.
-a, auto
Program ³aduj±cy LILO dodaje s³owo "auto" do linii poleceñ, je¿eli uruchomi³ j±dro z domy¶ln± lini± poleceñ (u¿ytkownik jej nie zmienia³). Je¿eli init znajdzie to s³owo, ustawi zmienn± ¶rodowiskow± "AUTOBOOT" na "yes". Proszê zauwa¿yæ, ¿e nie mo¿na tego u¿yæ jako ¶rodka bezpieczeñstwa - oczywi¶ci u¿ytkownik móg³ rêcznie w linii poleceñ wpisaæ "auto" u¿yæ opcji -a.
-z xxx
Argument opcji -z jest ignorowany. Mo¿e byæ u¿yta do wyd³u¿enia linii poleceñ, tak ¿eby zajmowa³a wiêcej miejsca na stosie. Init mo¿e wtedy manipulowaæ lini± poleceñ, tak ¿eby ps(1) pokazywa³o bie¿±cy tryb uruchomienia.

INTERFEJS

Init nas³uchuje wiadomo¶ci na ³±czu fifo w /dev, /dev/initctl. Telinit u¿ywa tego do komunikacji z procesem init. Ten interfejs nie jest zbyt dobrze udokumentowany czy skoñczony. Zainteresowani powinni przestudiowaæ plik initreq.h w podkatalogu src/ archiwum tarowego z kodem ¼ród³owym init.

SYGNA£Y

Init reaguje na nastêpuj±ce sygna³y:
SIGHUP
Ma ten sam efekt co telinit q.
SIGUSR1
Po odebraniu tego sygna³u, init zamyka i ponownie otwiera swoj± kontrolkê fifo, /dev/initctl. U¿yteczne w przypadku skryptów startowych, gdy przemontowywany jest katalog /dev.
SIGINT
Zwykle ten sygna³ jest wysy³any z j±dra by powiedzieæ, ¿e wci¶niêta zosta³a kombinacja klawiszy CTRL-ALT-DEL. Powoduje to rozpoczêcie akcji ctrlaltdel.
SIGWINCH
J±dro wysy³a ten sygna³ je¶li wci¶niêty zosta³ klawisz KeyboardSignal. Aktywuje to akcjê kbrequest.

ZGODNE Z

Init jest kompatybilny z init obecnym System V. Dzia³a razem ze skryptami w katalogach /etc/init.d i /etc/rc{poziom_dzia³ania}.d. Je¶li twój system u¿ywa tej konwencji, to powinien byæ obecny plik README w katalogu /etc/init.d wyja¶niaj±cy, jak te skrypty dzia³aj±.

PLIKI


/etc/inittab

/etc/initscript

/dev/console

/var/run/utmp

/var/log/wtmp

/dev/initctl

UWAGI

Init zak³ada, ¿e procesy i ich procesy potomne pozostaj± w tej samej grupie procesów, która by³a dla nich oryginalnie stworzona. Je¿eli jakikolwiek proces zmieni³ sw± przynale¿no¶æ do grupy procesów, init nie mo¿e ich zabiæ i mo¿e skoñczyæ siê na tym, ¿e zostan± dwa procesy czytaj±ce z jednej linii terminala.

DIAGNOSTYKA

Je¶li init zorientuje siê, ¿e wci±¿ powtarza namna¿anie zadanego procesu czê¶ciej ni¿ 10 razy w ci±gu 2 minut, wtedy za³o¿y, ¿e gdzie¶ w wywo³aniu komendy jest b³±d, wy¶le wiadomo¶æ o b³êdzie na konsolê systemu, i przerwie pomna¿anie danego pola do up³yniêcia 5 minut lub do odebrania sygna³u. Zapobiega to "zjadaniu" zasobów systemu gdy kto¶ pope³ni b³±d typograficzny (bardziej po naszemu: "literówkê" - przyp. t³um.) w pliku /etc/inittab lub gdy program normalnie uruchamiany dla danego wpisu jest usuniêty.

AUTOR

Miquel van Smoorenburg (miquels@cistron.nl), pierwsz± wersjê strony podrêcznika napisa³ Michael Haardt (u31b3hs@pool.informatik.rwth-aachen.de).

PATRZ TAK¯E

getty(1), login(1), sh(1), runlevel(8), shutdown(8), kill(1), inittab(5), initscript(5), utmp(5)