.\" This is free documentation; you can redistribute it and/or .\" modify it under the terms of the GNU General Public License as .\" published by the Free Software Foundation; either version 2 of .\" the License, or (at your option) any later version. .\" .\" The GNU General Public License's references to "object code" .\" and "executables" are to be interpreted as the output of any .\" document formatting or typesetting system, including .\" intermediate and printed output. .\" .\" This manual is distributed in the hope that it will be useful, .\" but WITHOUT ANY WARRANTY; without even the implied warranty of .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the .\" GNU General Public License for more details. .\" .\" You should have received a copy of the GNU General Public .\" License along with this manual; if not, write to the Free .\" Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, .\" USA. .\" .\" Translated into german by Martin Okrslar .\" Modified Fri Jan 12 01:15:29 2001 by Martin Schulze .\" .TH INIT 8 "11. February 2000" "" "Dienstprogramme zur Systemverwaltung" .SH BEZEICHNUNG init, telinit \- Initialisierung der Kontrolle über Prozesse und Runlevel .SH SYNTAX .B /sbin/init .RB [ -t .IR sec ] .RB [ 0123456SsQq ] .B /sbin/telinit .RB [ -t .IR sec ] .RB [ 0123456SsQq ] .SH BESCHREIBUNG .SS init .B Init ist der Vater aller Prozesse. Seine Hauptaufgabe besteht darin, Prozesse nach einem Skript in der Datei .I /etc/inittab zu erzeugen (siehe auch .BR inittab (5)). Diese Datei hat normalerweise bestimmte Einträge, die \fBinit\fP dazu veranlassen auf jeder Leitung .BR getty s zu erzeugen, auf der sich ein Benutzer einloggen kann. Er kontrolliert auch alle autonomen Prozesse, die von einem bestimmten System benötigt werden. .SH RUNLEVEL Ein Runlevel ist ein Softwarezustand des Systems, der es nur einer bestimmten Gruppe von Prozessen erlaubt ausgeführt zu werden. Die Prozesse, die von .B init für jeden dieser Runlevel erzeugt werden, sind in der Datei .I /etc/inittab definiert. .B Init kann sich in einem von acht Runlevel befinden, .B 0\-6 und .B S oder .BR s . .B Init wechselt den Runlevel, wenn ein priviligierter Benutzer das Programm .B /sbin/telinit startet, das .B init bestimmte Signale sendet, die ihm sagen, in welchen Runleveles wechseln soll. Die Runlevel .BR 0 ", " 1 " und " 6 sind reserviert. Der Runlevel .B 0 wird dazu verwendet, das System anzuhalten, der Runlevel .B 6 iwr dafür benutzt, das System neuzusatarten, und der Runlevel .B 1 wird dafür verwendet, das System in den Single-User-Modus herunterzufahren. Der Runlevel .B S wird normalerweise nicht direkt angesprungen, sondern dient nur als Zwischenstufe für die Skripte, die ausgeführt werden, wenn in den Runlevel .B 1 übergegangen wird. Weitere Informationen darüber finden Sie in den Handbuchseiten zu .BR shutdown (8) und .BR inittab (5). Die Runlevel .B 7-9 sind ebenfalls gültig, jedoch nicht wirklich dokumentiert. Das liegt daran, dass die "traditionellen" UNIX\-Varianten diese nicht benutzen. Manche werden sich vielleicht auch wundern, dass es zwischen den Runlevel .B S und .B s keinen ersichtlichen Unterschied gibt. Tatsächlich sind beide Optionen lediglich ein Alias für ein und den selben Runlevel. .SH SYSTEMSTART Wenn .B init im letzten Schritt des Bootprozesses aufgerufen wird, sucht er nach der Datei .I /etc/inittab und sieht nach, ob es dort einen .BR initdefault \-Eintrag gibt (siehe .BR inittab (5)). .B initdefault bestimmt den .RI Anfangs\- runlevel des Systems. Falls es dort keine derartige Eintragung gibt, oder gar keine .IR inittab \-Datei existiert, so muss an der Systemkonsole der .I runlevel eingegeben werden. Die .I runlevel .B S oder .B s bringen das System in den Single-user Modus, und benötigen keine .IR /etc/inittab \-Datei. Im Single-user-Modus wird auf .I /dev/console .B /sbin/sulogin aufgerufen. Wenn das System in den Single-user Modus übergeht, liest .B init die .BR ioctl (2)\-Zustände der Konsole in .IR /etc/ioctl.save . Existiert diese Datei nicht, dann initialisiert .B init die Leitung mit 9600 BAUD und mit .BR CLOCAL \-Einstellungen. Wenn .B init den Single-User-Modus verlässt, schreibt es die .IR ioctl \-Einstellungen in diese Datei, so dass diese Einträge bei der nächsten Single-User-Sitzung wiederverwendet werden können. Wenn .B init das erste mal in einen Multi-User-Modus eintritt, führt er die .BR boot \- und .BR bootwait \-Einträge der Datei .I /etc/inittab aus, die es erlauben, dass die Dateisysteme gemountet werden können, bevor sich ein Benutzer einloggen kann. Danach werden alle die .I runlevel betreffenden Einträge ausgeführt. Immer wenn .B init einen neuen Prozess startet, schaut das Programm erst nach, ob die Datei .I /etc/initscript existiert. Wenn es sie gibt, benutzt .B init das Skript dieser Datei um den Prozess zu starten. Jedesmal, wenn ein Kindprozess terminiert, hält .B init diese Tatsache und den Grund, weshalb der Kindprozess gestorben ist, in den Dateien .I /var/run/utmp und .I /var/log/wtmp fest, falls diese Dateien existieren. .SH RUNLEVEL-ÄNDERUNGEN Sobald alle vorgesehenen Prozesse erzeugt worden sind, wartet .B init darauf, dass ein Kindprozess stirbt, auf ein Stromausfallsignal oder auf eine Anweisung von .BR /sbin/telinit , in welchen .I runlevel er wechseln soll. Wenn eine der drei oben genannten Bedingungen erfüllt ist, untersucht .B init nochmals die .IR /etc/inittab \-Datei, da dieser Datei jederzeit neue Einträge hinzugefügt werden können. Man kann den schlafenden .BR init \-Prozess auch mit den Kommandos .B Q oder .B q aufwecken, was ihn dazu veranlaßt, nochmals die .IR /etc/inittab \-Datei zu examinieren. Wenn .B init sich nicht im Single-User Modus befindet, und ein Stromausfallsignal (SIGPWR) empfängt, liest es die Datei .IR /etc/powerstatus . Anschließend wird ein Befehl anhand des Inhalts der Datei gestartet: .IP F(AIL) Strom fällt aus, die USV versorgt den Rechner mit Strom. Die .BR powerwait "\- und " powerfail \-Einträge werden ausgeführt. .IP O(K) Strom wurde wiederhergestellt, es werden die .BR powerokwait \-Einträge ausgeführt. .IP L(OW) Strom wird knapp und die USV geht auf dem Zahnfleisch. Die .BR powerfailnow \-Einträge werden ausgeführt. .PP Wenn .I /etc/powerstatus nicht existiert oder etwas anderes enthält als die Buchstaben .BR F ", " O " oder " L, wird .B init sich so verhalten als hätte es den Buchstaben .B F gelesen. Die Verwendung von SIGPWR und .I /etc/powerstatus werden nicht empfohlen. Wenn etwas mit .B init interagieren möchte, sollte der Kontrollkanal .I /dev/initctl verwendet werden - siehe Quellcode des sysvinit-Pakets für mehr Dokumentation darüber. Wenn .B init angewiesen wird den .I runlevel zu wechseln, wird das Warnsignal .B SIGTERM an alle Prozesse geschickt, die nicht in der Datei .I /etc/inittab für den neuen .I runlevel vorgesehen sind. .B Init wartet dann 5 Sekunden bevor er diese Prozesse mit dem kill-Signal .B SIGKILL gewaltsam terminiert. Achtung: .B init nimmt an, dass alle diese Prozesse (und deren Nachfahren) in derselben Prozessgruppe verblieben sind, die .B init ursprünglich für sie erzeugt hat (siehe .BR setpgrp (2)). Wenn irgendeiner dieser Prozesse seine Prozessgruppenzugehörigkeit geändert hat, wird er diese Signale nicht erhalten! Solche Prozesse müssen einzeln terminiert werden! .SH TELINIT Das Programm .B /sbin/telinit ist auf .B /sbin/init gelinkt. Er wird mit Argumenten, die aus nur einem Buchstaben bestehen gesteuert, und sendet .B init Anweisungen (Signale), welche Aktionen dieses auszuführen hat. Die folgenden Argumente dienen als Anweisungen für .BR telinit : .TP .BR 0 , 1 , 2 , 3 , 4 , 5 " oder " 6 befehlen .B init in den angegebenen Runlevel zu wechseln. .TP .BR a , b , c befehlen .B /sbin/init nur die Einträge der Datei .I /etc/inittab auszuführen, die den Runlevel .BR a ", " b " oder " c haben. .TP .BR Q " oder " q befehlen .B /sbin/telinit nocheinmal die Datei .I /etc/inittab einzulesen. .TP .BR S " oder " s befehlen .B /sbin/telinit in den Single-User-Modus zu schalten. .PP .B /sbin/telinit kann den .BR init \-Prozess auch anweisen, wie viel Zeit dieser zwischen dem Senden des TERM und des KILL Signals warten soll; die Standardeinstellung ist 5 Sekunden, kann jedoch durch die Option .BI \-t " sec" verändert werden. .B /sbin/telinit kann nur von Benutzern mit einer entsprechenden Berechtigung aufgerufen werden. Das .BR init \-Programm überprüft, ob es als .B init oder .B telinit gestartet wurde, indem es auf seine Prozess-ID schaut; die reelle Prozess-ID von .B init ist immer 1. Von daher darf man einfach auch .B init anstelle von .B telinit verwenden oder eines Aliases. .SH UMGEBUNG .B Init setzt folgende Umgebungsvariablen für alle seine Kindprozesse: .TP .B PATH Wird standardmäßig auf .I /usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin gesetzt. .TP .B INIT_VERSION Wie der Name schon sagt. Nützlich, wenn ein Skript direkt von init ausgeführt werden soll. .TP .B RUNLEVEL Der augenblickliche Runlevel des Systems. .TP .B PREVLEVEL Der vorherige Runlevel (nützlich nach einer Änderung des Runlevels). .TP .B CONSOLE Die System-KOnsole. Diese wird tatsächlich vom Kernel vererbt; wenn sie jedoch nicht gesetzt ist, wird .B init sie auf .I /dev/console setzen als Voreinstellung. .SH BOOTSIGNALE Es ist möglich .B init eine Reihe von Bootsignalen (bootflags) vom Bootmonitor aus (d.h. vom LILO aus) zu übergeben. .B Init akzeptiert folgende Signale: .TP .BR "\-s" ", " S ", " single Bootet im Single-user Modus. In diesem Modus wird zuerst die Datei .I /etc/inittab eingelesen; danach werden, noch bevor die Single-User-Shell gestartet wird, die Bootskripte der Datei .I /sbin/init.d/boot ausgeführt. .TP .BR 1 , 2 , 3 , 4 " oder " 5 Weist .B init an, in welchen Runlevel gebootet werden soll. .TP .BR \-b ", " emergency Gibt .B init die Anweisung direkt in den Single-User-Modus zu booten, ohne irgendwelche Startup-Skripte auszuführen. .TP .BR \-a ", " auto .\" ACHTUNG: Englisches Original ergibt keinen Sinn... Der LILO-Bootloader fügt das Wort an den Kernel. .B init ist in der Lage, es zu lesen. .TP .B \-z xxx Das Argument zu .B \-z wird ignoriert. Sie können es benutzen, um die Kommandozeile etwas zu verlängern, damit sie etwas mehr Platz auf dem Stack reserviert. .B Init kann anschließend die Kommandozeile derart modifizieren, dass .BR ps (1) den aktuellen Runlevel anzeigt. .SH SCHNITTSTELLE .B Init lauscht auf einem Fifo in .IR /dev ", " /dev/initctl , auf Nachrichten. .B Telinit benutzt diesen, um mit .B init zu kommunizieren. Die Schnittstelle ist noch nicht sehr ausführlich dokumentiert. Wer interessiert ist, möge die Datei .I initreq.h im Quellcode von init studieren. .SH SIGNALE Init reagiert auf verschiedene Signale: .TP 0.5i .B SIGHUP Init sucht nach .I /etc/initrunlvl und .IR /var/log/initrunlvl . Wenn eine dieser Dateien existiert und einen ASCII-Runlevel enthält, wechselt .B init in den neuen Runlevel. .I Dieses existiert nur für Abwärtskompatibilität! In normalen Fällen (wenn die Dateien nicht existieren) verhält sich init, als wenn .B telinit q ausgeführt wurde. .PP .TP 0.5i .B SIGUSR1 Beim Emfang dieses Signals schließt init sein Kontroll-Fifo .I /dev/initctl und öffnet ihn wieder. Das ist sinnvoll für Boot-Skripte, wenn .I /dev neu gemountet wird. .TP 0.5i .B SIGINT Normalerweise sendet der Kernel dieses Signal an .IR init , wenn CTRL-ALT-DEL gedrückt wurde. Es aktiviert die .IR ctrlaltdel \-Aktion. .TP 0.5i .B SIGWINCH Der Kernel sendet dieses Signal, wenn die .IR KeyboardSignal \-Taste gedrückt wurde. Es aktiviert die .IR kbdrequest \-Aktion. .SH "KONFORM ZU" .B Init ist kompatibel zum System V init. Er arbeitet eng mit den Skripten zusammen, die in den Verzeichnissen .I /sbin/init.d und .I /sbin/init.d/rc{runlevel 1\-6}.d untergebracht sind. Wenn das System dieser Konvention folgt, sollte sich in diesem Verzeichnis eine .B README \-Datei befinden, die erklärt wie diese Skripte funktionieren. .SH DATEIEN .nf .I /etc/inittab .I /etc/initscript .I /dev/console .I /etc/ioctl.save .I /var/run/utmp .I /var/log/wtmp .I /dev/initctl .fi .SH WARNUNGEN .B Init geht davon aus, dass alle Prozesse und Kindprozesse in der selben Prozessgruppe verbleiben, die ursprünglich für sie eingerichtet worden ist. Wenn einer dieser Prozesse in eine andere Gruppe wechselt, kann .B init ihn nicht mehr beenden, und es kann passieren, dass man in einem Zustand landet, in dem zwei Prozesse von einer Terminalleitung Befehle einlesen wollen. .SH DIAGNOSE Wenn .B init herausfindet, dass es kontinuierlich einen Eintrag öfter als 10 mal in 2 Minuten neu erzeugt, wird es annehmen, dass ein Fehler in der Befehlszeile vorliegt, einen Fehler erzeugen, Meldungen auf die Systemkonsole erstatten und sich weigern, den Eintrag auszuführen, bis 5 Minuten vergangen sind oder es ein Signal empfängt. Dieses verhindert, dass Systemressourcen verschwendet werden, wenn jemand einen Tippfehler in .I /etc/inittab einbaut oder das zum Eintrag gehörende Programm löscht. .SH AUTOR Miquel van Smoorenburg , ursprüngliche Manpage von Michael Haardt , Übersetzung Martin Okrslar und Überarbeitung von Martin Schulze . .SH "SIEHE AUCH" .BR getty (1), .BR login (1), .BR sh (1), .BR who (1), .BR shutdown (1), .BR kill (2), .BR inittab (5), .BR inscript (5), .BR utmp (5).