Scroll to navigation

INIT(8) Linux-Systemverwaltungshandbuch INIT(8)

BEZEICHNUNG

init, telinit - Initialisierung der Prozesssteuerung

ÜBERSICHT

/sbin/init [ -a ] [ -s ] [ -b ] [ -z xxx ] [ 0123456Ss ]
/sbin/init [ --version ]
/sbin/telinit [ -t SEKUNDEN ] [ 0123456sSQqabcUu ]
/sbin/telinit [ -e VAR[=WERT] ]

BESCHREIBUNG

Init

init ist der Elternprozess aller Prozesse. Seine Hauptaufgabe besteht darin, Prozesse aus einem Skript in der Datei /etc/inittab zu erzeugen (siehe auch inittab(5)). Diese Datei hat normalerweise Einträge, die init dazu veranlassen auf jeder Leitung gettys zu erzeugen, auf der sich ein Benutzer einloggen kann. Er steuert auch alle unabhängigen Prozesse, die von einem bestimmten System benötigt werden.

RUNLEVEL

A runlevel is a software configuration of the system which allows only a selected group of processes to exist. The processes spawned by init for each of these runlevels are defined in the /etc/inittab file. init can be in one of eight runlevels: 0–6 and S (a.k.a., s). The runlevel is changed by having a privileged user run telinit, which sends appropriate signals to init, telling it which runlevel to change to.

Die Runlevel S, 0, 1 und 6 sind reserviert. Der Runlevel S wird benutzt, um das System beim Start zu initialisieren. Wenn Runlevel S (beim Start) oder Runlevel 1 (umschalten von einem Mehrbenutzer-Runlevel) gestartet wird, wechselt das System in den »Einzelbenutzermodus«, nach dem der aktuelle Runlevel S ist. Runlevel 0 wird benutzt, um das System zu stoppen, Runlevel 6 startet das System neu.

Nach dem Starten durch S tritt das System automatisch in die Mehrbenutzer-Runlevel 2 bis 5 ein, falls es dort kein Problem gibt, das vom Administrator im Einzelbenutzermodus behoben werden muss. Normalerweise führt der Administrator nach Eintreten in den Einzelbenutzermodus Wartungsarbeiten durch und startet dann das System neu.

Lesen Sie die Handbuchseiten von shutdown(8) und inittab(5), um weitere Informationen zu erhalten.

Runlevels 7–9 are also valid, though not really documented. This is because "traditional" Unix variants don't use them.

Die Runlevel S und s sind identisch. Intern sind sie Aliase für den gleichen Runlevel.

SYSTEMSTART

After init is invoked as the last step of the kernel boot sequence, it looks for the file /etc/inittab to see if there is an entry of the type initdefault (see inittab(5)). The initdefault entry determines the initial runlevel of the system. If there is no such entry (or no /etc/inittab at all), a runlevel must be entered at the system console.

Die Runlevel S oder s initialisieren das System und benötigen keine /etc/inittab-Datei.

Im Einzelbenutzermodus wird /sbin/sulogin auf /dev/console aufgerufen.

When entering single user mode, init initializes the consoles stty settings to sane values. Clocal mode is set. Hardware speed and handshaking are not changed.

Beim ersten Eintritt in den Mehrbenutzermodus führt init die boot- und bootwait-Einträge aus, um das Einhängen von Dateisystemen zu erlauben, bevor Anwender sich anmelden können. Dann werden alle Einträge, die zum Runlevel passen, verarbeitet.

When starting a new process, init first checks whether the file /etc/initscript exists. If it does, it uses this script to start the process.

Jedesmal, wenn ein Kindprozess endet, zeichnet init diesen Umstand und den Grund der Beendigung in /var/run/utmp und /var/log/wtmp auf, sofern diese Dateien existieren.

RUNLEVEL ÄNDERN

Nachdem alle vorgesehenen Prozesse erzeugt worden sind, wartet init darauf, dass ein untergeordneter Prozess endet, ein Stromausfallsignal oder darauf, dass telinit einen Wechsel des Runlevels signalisiert. Wenn eine der drei oben genannten Bedingungen erfüllt ist, untersucht init nochmals die /etc/inittab-Datei. Es können jederzeit neue Einträge zu dieser Datei hinzugefügt werden. Jedoch wartet init immer noch darauf, dass einer der drei oben genannten Bedingungen eintritt. Um eine sofortige Antwort bereitzustellen, können die Befehle telinit Q oder q init aufwecken, um die Datei /etc/inittab erneut zu prüfen (neu zu laden).

If init is not in single user mode and receives a powerfail signal (SIGPWR), it reads the file /etc/powerstatus. It then starts a command based on the contents of this file:

Power is failing, UPS is providing the power. Execute the powerwait and powerfail entries.
Stromkreis wurde wieder geschlossen, die powerokwait-Einträge werden ausgeführt.
The power is failing and the UPS has a low battery. Execute the powerfailnow entries.

Wenn /etc/powerstatus nicht existiert oder etwas anderes enthält als die Buchstaben F, O oder L, wird init sich so verhalten, als hätte es den Buchstaben F gelesen.

Usage of SIGPWR and /etc/powerstatus is discouraged. Someone wanting to interact with init should use the /run/initctl control channel – see the initctl(5) manual page for more documentation about this.

Falls init die Aufforderung zum Wechsel des Runlevels erhält, sendet es das Warnsignal SIGTERM an alle nicht im neuen Runlevel definierten Prozesse. Dann wartet es drei Sekunden bevor es diese Prozesse gewaltsam per Signal SIGKILL beendet. Beachten Sie, dass init davon ausgeht, dass diese Prozesse (und ihre Unterprozesse) in der gleichen Prozessgruppe verbleiben, die init ursprünglich für sie erstellt hatte. Wenn Prozesse ihre Gruppenzugehörigkeit andern, werden Sie diese Signale nicht empfangen. Solche Prozesse müssen separat beendet werden.

TELINIT

/sbin/telinit ist mit /sbin/init verknüpft. Es empfängt Argumente aus einem Buchstaben oder init-Signale, um die zugehörige Aktion durchzuführen. Die folgenden Argumente dienen als Anweisungen für telinit:

0, 1, 2, 3, 4, 5 oder 6
init mitteilen, in den angegebenen Runlevel zu schalten.
tell init to process only those /etc/inittab file entries having runlevel a, b or c.
init mitteilen, die Datei /etc/inittab erneut zu prüfen.
init mitteilen, in den Einzelbenutzermodus zu wechseln.
tell init to re-execute itself (preserving the state). No re-examining of /etc/inittab file happens. Runlevel should be one of Ss0123456 otherwise request would be silently ignored.

telinit kann dem init-Prozess mitteilen, wie viel Zeit dieser zwischen dem Senden der Signale SIGTERM und SIGKILL warten soll. Die Vorgabe ist drei Sekunden, dies kann aber durch die Option -t geändert werden.

telinit -e weist init an, die Umgebung für Prozesse zu ändern, die es erzeugt. Das Argument von -e ist entweder in der Form VAR=WERT, was die Variable VAR auf den Wert WERT setzt oder in der FormVAR (ohne Gleichheitszeichen), was die Variable VAR leert.

init kann nur von Benutzern mit geeigneten Rechten aufgerufen werden.

The init binary checks if it is init or telinit by looking at its process id; the real init's process id is always 1. From this it follows that instead of calling telinit one can also just use init instead as a shortcut.

UMGEBUNGSVARIABLEN

Init setzt folgende Umgebungsvariablen für alle seine Kindprozesse:

/bin:/usr/bin:/sbin:/usr/sbin
As the name says. Useful to determine if a script runs directly from init.
RUNLEVEL
Der aktuelle Runlevel des Systems.
Der vorherige Runlevel (nützlich nach einer Änderung des Runlevels).
The system console. This is really inherited from the kernel; however if it is not set init will set it to /dev/console by default.

BOOTSCHALTER

It is possible to pass a number of flags to init from the boot monitor (e.g., LILO or GRUB). init accepts the following flags:

Single user mode boot. In this mode /etc/inittab is examined and the bootup rc scripts are usually run before the single user mode shell is started.
1–5
Runlevel, in den gestartet wird.
Startet direkt in eine Einzelbenutzer-Shell, ohne irgendwelche anderen Startskripte auszuführen.
The LILO boot loader adds the word "auto" to the command line if it booted the kernel with the default command line (without user intervention). If this is found init sets the "AUTOBOOT" environment variable to "yes". Note that you cannot use this for any security measures – of course the user could specify "auto" or -a on the command line manually.
The argument to -z is ignored. You can use this to expand the command line a bit, so that it takes some more space on the stack. init can then manipulate the command line so that ps(1) shows the current runlevel.
This argument, when used on its own, displays the current version of init to the console/stdout. It is a quick way to determine which init software and version is being used. After the version information is displayed, init immediately exits with a return code of zero.

SCHNITTSTELLE

init listens on a fifo in /dev, /run/initctl, for messages. Telinit uses this to communicate with init. The interface is not very well documented or finished. Those interested should study the initreq.h file in the src/ subdirectory of the init source code tar archive.

SIGNALE

Init reagiert auf mehrere Signale:

Hat die gleichen Auswirkungen wie telinit q.
On receipt of this signals, init closes and re-opens its control fifo, /run/initctl. Useful for bootscripts when /dev is remounted.
When init receives SIGUSR2, init closes and leaves the control fifo, /run/initctl, closed. This may be used to make sure init is not holding open any files. However, it also prevents init from switching runlevels. Which means commands like shutdown no longer work. The fifo can be re-opened by sending init the SIGUSR1 signal.
Normally the kernel sends this signal to init when CTRL-ALT-DEL is pressed. It activates the ctrlaltdel action.
Der Kernel sendet dieses Signal, falls die KeyboardSignal-Taste gedrückt wurde. Es aktiviert die kbdrequest-Aktion.

KONFORM ZU

init is compatible with the System V init. It works closely together with the scripts in the directories /etc/init.d and /etc/rc{runlevel}.d. If your system uses this convention, there should be a README file in the directory /etc/init.d explaining how these scripts work.

DATEIEN

/etc/inittab
/etc/initscript
/dev/console
/var/run/utmp
/var/log/wtmp
/run/initctl

WARNUNGEN

init geht davon aus, dass alle Prozesse und Kindprozesse in der selben Prozessgruppe verbleiben, die ursprünglich für sie eingerichtet wurde. Falls einer dieser Prozesse die Gruppe wechselt, kann init ihn nicht mehr beenden und es kann passieren, dass Sie in einem Zustand landen, in dem zwei Prozesse von einer Terminalzeile Befehle einlesen wollen.

Auf einem Debian-System veranlasst das Eintreten in Runlevel 1, dass alle Prozesse mit Ausnahme von Kernel-Threads und dem Skript, das das Beenden erledigt und andere Prozesse in deren Sitzung, beendet werden. Als Konsequenz davon ist es nicht sicher, von von Runlevel 1 zu einem Mehrbenutzer-Runlevel zurückzukehren: Daemons, die in Runlevel S gestartet wurden und für normale Operationen benötigt werden, laufen nicht länger. Das System sollte neu gestartet werden.

DIAGNOSE

Wenn init herausfindet, dass es kontinuierlich einen Eintrag öfter als zehn mal in zwei Minuten neu erzeugt, wird es annehmen, dass ein Fehler in der Befehlszeile vorliegt, eine Fehlermeldung auf der Befehlszeile erzeugen und sich weigern, den Eintrag auszuführen, bis fünf Minuten vergangen sind oder es ein Signal empfängt. Dieses verhindert, dass Systemressourcen verschwendet werden, wenn jemandem ein Tippfehler in /etc/inittab unterläuft oder das zum Eintrag gehörende Programm gelöscht wird.

AUTOR

Miquel van Smoorenburg , ursprüngliche Handbuchseite von Michael Haardt.

SIEHE AUCH

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

29. Juli 2004 sysvinit