NAZWA¶
init, telinit - sterowanie procesu inicjującego
SKŁADNIA¶
/sbin/init [
 -a ] [
 -s ] [
 -b ] [
 -z
  xxx] [ 
 0123456Ss ]
 
/sbin/telinit [
 -t SEKUNDY ] [
 0123456sSQqabcUu ]
 
/sbin/telinit [
 -e
  ZMIENNA[
=WARTOŚĆ] ]
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 (inaczej 
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 
S, 
0, 
1, oraz 
6 są zarezerwowane.
  Tryb S jest używany do zainicjowania systemu, podczas jego rozruchu. Gdy
  uruchamiany jest tryb pracy S (w czasie rozruchu) lub tryb pracy 1
  (przełączanie się z trybu wielu użytkowników), system
  jest wprowadzany w tryb pracy jednego użytkownika ("single-user
  mode"), po którym bieżącym poziomem pracy jest S. Tryb 0
  jest używany, by zatrzymać system; tryb 6, by przeładować
  system (reboot).
Po zakończeniu rozruchu w poziomie S, system jest automatycznie wprowadzany
  w jeden z trybów wielu użytkowników, od 2 do 5, chyba że
  wystąpił problem, który musi zostać naprawiony przez
  administratora, w trybie jednego użytkownika. Po przejściu w tryb
  jednego użytkownika administrator zwykle zajmuje się
  konserwacją, a następnie przeładowuje system.
Aby uzyskać więcej informacji na ten temat, proszę zapoznać
  się ze stronami podręcznika 
shutdown(8) i 
inittab(5).
Tryby pracy 7-9 również są poprawne, choć niezbyt dobrze
  udokumentowane. Wynika to z faktu, że "tradycyjne" warianty
  Uniksa nie używają ich.
Poziomy 
S i 
s są w rzeczywistości takie same.
  Wewnętrznie są to tylko zastępcze nazwy dla tego samego trybu
  pracy.
ROZRUCH¶
Po tym jak 
init jest wywołany w ostatnim kroku sekwencji rozruchowej
  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 
initem,
  powinien użyć kanału kontroli 
/run/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 Ss0123456, 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.
telinit -e mówi procesowi 
init, aby zmienił
  środowisko procesów, które mnoży. Argumenty do 
-e
  mogą mieć postać 
ZMIENNA=
WARTOŚĆ,
  która ustawia zmiennej 
ZMIENNA wartość
  
WARTOŚĆ lub postać 
ZMIENNA (bez znaku
  równości), która usuwa zmienną 
ZMIENNA.
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
 
  - /bin:/usr/bin:/sbin:/usr/sbin
 
  - 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, S, single
 
  - Rozruch 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 /run,
  
/run/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, /run/initctl.
 
  - 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
/run/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 jednego wiersza terminala.
W systemie Debian, wejście w poziom pracy 1 powoduje zabicie wszystkich
  procesów z wyjątkiem wątków jądra i skryptu
  który wykonuje zabijanie oraz innych procesów w jego sesji. W
  konsekwencji, powracanie z poziomu 1 do poziomu pracy trybu wielu
  użytkowników nie jest bezpieczne: demony, które zostały
  uruchomione w poziomie S i są wymagane do normalnego działania nie
  są dłużej uruchomione. System powinien zostać uruchomiony
  ponownie.
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
  literówkę 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)
TŁUMACZENIE¶
Tłumaczenie opisuje tradycyjną wersję init z 
SystemV,
  używaną domyślnie przez Debiana. W przypadku korzystania z init
  udostępnianego przez wywodzący się z Ubuntu 
upstart,
  proszę wydać polecenie 
man --locale=C 8 init, aby
  zapoznać się z właściwym opisem w języku angielskim.
Autorami polskiego tłumaczenia niniejszej strony podręcznika man
  są: Paweł Wilk (PTM) <siewca@dione.ids.pl>, Robert Luberda
  (PTM) <robert@debian.org> i Michał Kułach
  <michal.kulach@gmail.com>.
Polskie tłumaczenie jest częścią projektu manpages-pl;
  uwagi, pomoc, zgłaszanie błędów na stronie
  
http://sourceforge.net/projects/manpages-pl/. Jest zgodne z wersją 
  2.88 oryginału.