![]() | Upline: Infos & Dokus
Administration
Linux
Linux manpages
man init, telinitMit dem Linux-Befehl init kann man das Runlevel des Systems �ndern. Dies wird z.B. h�ufig dazu genutzt, um vom Konsolenlogin in die grafische Oberfl�che zu kommen oder andersherum, um die grafische Oberfl�che KDE/Gnome oder was auch immer (meist auf Runlevel 5) zu beenden und zum einfachen Konsolenlogin zu kommen. Die Runlevels 0 (Herunterfahren), 1 (Single-User-Modus) und 6 (Neustart) sind vordefiniert und bewirken bei allen Unix-/Linux-Derivaten das selbe Verhalten. Im Gegensatz dazu k�nnen die Runlevels 2-5 frei genutzt werden und viele Distributionen nutzen diese daher auch sehr unterschiedlich. Was in welchem Runlevel gestartet bzw. gestoppt wird, kann man aus folgenden Verzeichnissen entnehmen: rc0.d, rc1.d, rc2.d, rc3.d, rc4.d, rc5.d, rc6.d und rcS.d. Nicht f�r besondere Zwecke genutzte Runlevels werden (meist) identisch zum jeweils h�heren Runlevel-Inhalt belegt. So sind z.B. bei einem Debian Sarge ohne grafische Oberfl�che die Start- und Stopscripte in den Runlevels 2-5 identisch. Diese Scripte liegen physikalisch unter /etc/init.d/ und verweisen aus den Runlevel-Verzeichnissen nur per Symlink (weicher/symbolischer Link) auf die original Startscripte. Bei der Namensgebung der Runlevel-Links ist zu beachten, dass ein mit "S" beginnender Link zum Aufruf als Startscript und ein mit "K" beginnender Link als Stopscript bzw Killscript dient. Die Scripte selbst sind zwar identisch, werden aber durch Parameter gesteuert sowohl zum Starten als auch zum Stoppen bestimmter Prozesse (Daemons) verwendet. Hinter dem Anfangsbuchstaben "S" bzw. "K" folgt eine zweistellige Zahl, die die Reihenfolge des Startens bzw. Stoppens der Prozesse festlegt. Grunds�tzlich sollte die Stopreichenfolge entgegengesetzt zur Startreihenfolge sein. Nachfolgend kommt die unter der GPL stehende und von mir nochmals �berarbeitete Original-Version der Manpage zum Befehl init. Nameinit, telinit - Initialisierung der Kontrolle �ber Prozesse und Runlevel�bersicht/sbin/init [-t sec] [0123456SsQq]/sbin/telinit [-t sec] [0123456SsQq] Beschreibung und OptioneninitInit ist der Vater aller Prozesse. Seine Hauptaufgabe besteht darin, Prozesse nach einem Skript in der Datei /etc/inittab zu erzeugen (siehe auch inittab(5)). Diese Datei hat normalerweise bestimmte Eintr�ge, die init dazu veranlassen, auf jeder Leitung gettys zu erzeugen, auf der sich ein Benutzer einloggen kann. Er kontrolliert auch alle autonomen Prozesse, die von einem bestimmten System ben�tigt werden.RunlevelEin Runlevel ist ein Softwarezustand des Systems, der es nur einer bestimmten Gruppe von Prozessen erlaubt, ausgef�hrt zu werden. Die Prozesse, die von init f�r jeden dieser Runlevel erzeugt werden, sind in der Datei /etc/inittab definiert. Init kann sich in einem von acht Runleveln befinden: 0-6 und S bzw. s. Init wechselt den Runlevel, wenn ein privilegierter Benutzer das Programm /sbin/telinit startet, welches init bestimmte Signale sendet, die ihm sagen, in welchen Runlevel gewechselt werden soll.Die Runlevel 0, 1 und 6 sind reserviert. Der Runlevel 0 wird dazu verwendet, das System anzuhalten, der Runlevel 6 wird genutzt, um das System neu zu starten, und der Runlevel 1 wird daf�r verwendet, das System in den Single-User-Modus herunterzufahren. Der Runlevel S wird normalerweise nicht direkt angesprungen, sondern dient nur als Zwischenstufe f�r die Skripte, die ausgef�hrt werden, wenn in den Runlevel 1 �bergegangen wird. Weitere Informationen dar�ber finden Sie in den Handbuchseiten zu shutdown(8) und inittab(5). Die Runlevel 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 S und s keinen ersichtlichen Unterschied gibt. Tats�chlich sind beide Optionen lediglich ein Alias f�r ein und den selben Runlevel. SystemstartWenn init im letzten Schritt des Bootprozesses aufgerufen wird, sucht er nach der Datei /etc/inittab und sieht nach, ob es dort einen initdefault-Eintrag gibt (siehe inittab(5)). initdefault bestimmt den Anfangs-Runlevel des Systems. Falls es dort keine derartige Eintragung gibt oder gar keine inittab-Datei existiert, so muss an der Systemkonsole der runlevel eingegeben werden.Die runlevel S und s bringen das System in den Single-User-Modus und ben�tigen keine /etc/inittab-Datei. Im Single-User-Modus wird auf /dev/console /sbin/sulogin aufgerufen. Wenn das System in den Single-User-Modus �bergeht, liest init die ioctl(2)-Zust�nde der Konsole in /etc/ioctl.save. Existiert diese Datei nicht, dann initialisiert init die Leitung mit 9600 BAUD und mit CLOCAL-Einstellungen. Wenn init den Single-User-Modus verl��t, schreibt es die ioctl-Einstellungen in diese Datei, so dass diese Eintr�ge bei der n�chsten Single-User-Sitzung wiederverwendet werden k�nnen. Wenn init das erste mal in einen Multi-User-Modus eintritt, f�hrt er die boot- und bootwait-Eintr�ge der Datei /etc/inittab aus, die es erlauben, dass die Dateisysteme gemountet werden k�nnen, bevor sich ein Benutzer einloggen kann. Danach werden alle die runlevel betreffenden Eintr�ge ausgef�hrt. Immer wenn init einen neuen Proze� startet, schaut das Programm erst nach, ob die Datei /etc/initscript existiert. Wenn es sie gibt, benutzt init das Skript dieser Datei, um den Proze� zu starten. Jedesmal, wenn ein Kindproze� terminiert, h�lt init diese Tatsache und den Grund, weshalb der Kindproze� gestorben ist, in den Dateien /var/run/utmp und /var/log/wtmp fest, falls diese Dateien existieren. Runlevel-�nderungenSobald alle vorgesehenen Prozesse erzeugt worden sind, wartet init darauf, dass ein Kindproze� stirbt, auf ein Stromausfallsignal oder auf eine Anweisung von /sbin/telinit, in welchen runlevel er wechseln soll. Wenn eine der drei oben genannten Bedingungen erf�llt ist, untersucht init nochmals die /etc/inittab-Datei, da dieser Datei jederzeit neue Eintr�ge hinzugef�gt werden k�nnen. Man kann den schlafenden init-Proze� auch mit den Kommandos Q oder q aufwecken, was ihn dazu veranla�t, nochmals die /etc/inittab-Datei zu examinieren.Wenn init sich nicht im Single-User-Modus befindet und ein Stromausfallsignal (SIGPWR) empf�ngt, liest es die Datei /etc/powerstatus. Anschlie�end wird ein Befehl anhand des Inhalts der Datei gestartet:
Die Verwendung von SIGPWR und /etc/powerstatus werden nicht empfohlen. Wenn etwas mit init interagieren m�chte, sollte der Kontrollkanal /dev/initctl verwendet werden - siehe Quellcode des sysvinit-Pakets f�r mehr Dokumentation dar�ber. Wenn init angewiesen wird den runlevel zu wechseln, wird das Warnsignal SIGTERM an alle Prozesse geschickt, die nicht in der Datei /etc/inittab f�r den neuen runlevel vorgesehen sind. Init wartet dann 5 Sekunden, bevor er diese Prozesse mit dem kill-Signal SIGKILL gewaltsam terminiert. Achtung: init nimmt an, dass alle diese Prozesse (und deren Nachfahren) in derselben Proze�gruppe verblieben sind, die init urspr�nglich f�r sie erzeugt hat (siehe setpgrp(2)). Wenn irgendeiner dieser Prozesse seine Proze�guppenzugeh�rigkeit ge�ndert hat, wird er diese Signale nicht erhalten! Solche Prozesse m�ssen einzeln terminiert werden! telinitDas Programm /sbin/telinit ist auf /sbin/init gelinkt. Er wird mit Argumenten, die aus nur einem Buchstaben bestehen gesteuert und sendet init Anweisungen (Signale), welche Aktionen dieses auszuf�hren hat. Die folgenden Argumente dienen als Anweisungen f�r telinit:
/sbin/telinit kann nur von Benutzern mit einer entsprechenden Berechtigung aufgerufen werden. Das init-Programm �berpr�ft, ob es als init oder telinit gestartet wurde, indem es auf seine Proze�-ID schaut; die reelle Proze�-ID von init ist immer 1. Von daher darf man einfach auch init anstelle von telinit verwenden oder eines Aliases. UmgebungInit setzt folgende Umgebungsvariablen f�r alle seine Kindprozesse:
BootsignaleEs ist m�glich init eine Reihe von Bootsignalen (bootflags) vom Bootmonitor aus (d.h. vom LILO aus) zu �bergeben. Init akzeptiert folgende Signale:
SchnittstelleInit lauscht auf einem Fifo in /dev, /dev/initctl, auf Nachrichten. Telinit benutzt diesen, um mit init zu kommunizieren. Die Schnittstelle ist noch nicht sehr ausf�hrlich dokumentiert. Wer interessiert ist, m�ge die Datei initreq.h im Quellcode von init studieren.SignaleInit reagiert auf verschiedene Signale:
Konform zuInit ist kompatibel zum System V init. Er arbeitet eng mit den Skripten zusammen, die in den Verzeichnissen /sbin/init.d und /sbin/init.d/rc{runlevel 1-6}.d untergebracht sind. Wenn das System dieser Konvention folgt, sollte sich in diesem Verzeichnis eine README-Datei befinden, die erkl�rt wie diese Skripte funktionieren.Dateien/etc/inittab/etc/initscript /dev/console /etc/ioctl.save /var/run/utmp /var/log/wtmp /dev/initctl WarnungenInit 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 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.DiagnoseWenn 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 Systemresourcen verschwendet werden, wenn jemand einen Tippfehler in /etc/inittab einbaut oder das zum Eintrag geh�rende Programm l�scht.AUTORMiquel van Smoorenburg miquels@cistron.nl, urspr�ngliche Manpage von Michael Haardt u31b3hs@pool.informatik.rwth-aachen.de, �bersetzung Martin Okrslar okrslar@informatik.uni-muenchen.de und �berarbeitung von Martin Schulze joey@infodrom.north.de und proteino.de ;)Siehe auchgetty(8), login(1), sh(1), who(1), shutdown(8), kill(2), inittab(5), utmp(5)11 February 2000 INIT(8) |