Login
Login-Name Passwort


 
Newsletter
Werbung

So, 10. Juli 2005, 00:00

Freundliche Helfer

Daemonen und SysvInit in Linux

Vorwort

Früher oder später kommt jeder Linux-Anwender einmal auf die Idee, den Befehl ps ax einzugeben. Möglicherweise zum ersten Mal stellt man nun fest, daß, bisher unbemerkt, eine ganze Reihe von Prozessen laufen. Was tun all diese Prozesse da? wird die nächste Frage sein. Nun, einige davon sind Kernel-Threads, also kernel-interne Prozesse, auf die der Anwender keinen Einfluß hat. Einige andere Prozesse sind die Programme, die das System oder der Anwender gestartet haben, beispielsweise X-Server, getty, Window-Manager oder Shell. Der Rest besteht zum Großteil aus Daemonen, und um diese wird sich dieser Artikel drehen.

Auch die gerade erwähnten Kernel-Threads kann man in gewissem Sinne als Daemonen bezeichnen. Jedoch gibt es nur wenig Möglichkeiten, diese zu beeinflussen (meist über das /proc-Dateisystem, ab Kernel 2.6 bevorzugt über das /sys-Dateisystem), daher klammern wir die Kernel-Threads in diesem Artikel aus.

Definition

Historisches

Der Name Daemon stammt von einem frühen Timesharing-Betriebssystem namens CTSS, das in den 1960ern, noch einige Jahre vor UNIX, entstand. Unter ITS, einem anderen Timesharing-System dieser Zeit, wurden entsprechende Programme Dragons (Drachen) genannt.

Wie die Drachen bezeichnen auch die Daemonen mystische Wesen. Sie sind freundliche Helfer der Menschen. Durch die Schreibweise mit ae unterscheiden sie sich von den bösen Dämonen (engl. demons).

Der spätere Versuch, das Wort Daemon als Abkürzung für Disk And Execution Monitor zu deuten, kann nur einem kranken Hirn entsprungen sein und hat mit der tatsächlichen Entstehungsgeschichte nichts zu tun.

Eigenschaften von Daemonen

Wie kann man einen Daemon erkennen, wenn man einem begegnet? Um diese Frage zu beantworten, ziehen wir das immer noch herausragende Buch "Programmierung in der Unix-Umgebung" von W. Richard Stevens [1] zu Rate (wer das Original bevorzugt, hat sicher schon "Advanced Programming in the UNIX Environment" im Regal stehen). Danach ist ein Daemon ein Prozeß mit einer hohen Lebensdauer, der oft schon beim Systemstart gestartet und erst beim Shutdown beendet wird. Nun ist natürlich ein Programm, das von einem User gestartet wird und einen Monat lang läuft (SETI) noch lange kein Daemon. Die Definition ist also noch nicht hinreichend. Es müssen noch weitere typische Eigenschaften von Daemonen erwähnt werden: Sie besitzen kein steuerndes Terminal, daher können sie Fehler- und andere Meldungen nicht auf den Bildschirm schreiben, sondern nur im Syslog oder eigenen Logdateien unterbringen. Außerdem erledigen sie meist eine Aufgabe für andere Programme, wobei der Daemon oft als Server und die anderen Programme als Clients agieren. Daemonen sind also oft mit bestimmten Diensten (Services) assoziiert und werden dann mit diesen gleichgesetzt. Man kann auch sagen, daß ein Daemon einen Dienst implementiert, wobei es natürlich unterschiedliche Implementierungen desselben Dienstes geben kann (man betrachte nur einmal die Anzahl der frei erhältlichen FTP- oder POP3-Server). Wenn man einen Daemon startet, spricht man oft auch davon, daß man einen Dienst gestartet hat.

Beim Einsatz als Server setzen die meisten Daemonen ein Netzwerk voraus, wobei aber nicht unbedingt ein realer Netzwerkanschluß vorhanden sein muß. Das Loopback-Netzwerk oder Unix Domain Sockets genügen dem Server meist schon.

Programmtechnisch unterscheiden sich Daemonen nur durch eine Handvoll Codezeilen von normalen Programmen. Diese haben hauptsächlich den Zweck, den Prozeß vom Terminal abzukoppeln. Ein Daemon "schiebt" sich also beim Start meist automatisch in den Hintergrund.

Daemonen und die Systeminitialisierung

Wenn man von Daemonen spricht, muß zwangsläufig auch die Systeminitialisierung ins Spiel kommen, denn wie wir oben bemerkt haben, werden viele Daemonen bereits beim Systemstart gestartet. Als Anwender merkt man dies aber höchstens an den komischen Meldungen auf dem Bildschirm während des Bootvorgangs:

"Starte syslog... OK"

rc-Dateien

Wir wollen jetzt einmal genauer beleuchten, was beim Systemstart so abläuft. Die folgende Darstellung ist in manchen Dingen nicht exakt bis ins kleinste Detail. Insbesondere sind die Pfade in den meisten Systemen anders als die hier angegebenen. Der Grund dafür ist einfach: Es gibt soviele Varianten von rc-Dateien, wie es Distributionen gibt (böse Zungen behaupten, sogar noch einige mehr).

Linux startet als ersten Prozeß nach dem Booten das Programm init, das meist in /sbin/init zu finden ist. Init liest eine Konfigurationsdatei, meist /etc/inittab, die definiert, welche weiteren Programme gestartet werden sollen. Wir wollen hier die etwas kryptische Syntax von /etc/inittab beiseite lassen. Wichtig zu wissen ist, daß Init mit dem Konzept der Runlevel arbeitet. Ein Runlevel wird mit einem einzelnen Zeichen bezeichnet. Am häufigsten werden S und die Ziffern 0-6 verwendet. Es gibt noch weitere, die aber selten benutzt werden.

Und wofür sind die Runlevel gut? Sie definieren, welche Programme automatisch gestartet werden. Das ist für jeden Runlevel frei konfigurierbar und geschieht eben in der /etc/inittab.

Obwohl die Runlevel frei konfigurierbar sind, hat sich doch ein gewisser Standard herauskristallisiert. Beschränken wir uns auf die normalerweise verwendeten Runlevel, so ist die folgende Liste eine typische Definition, wie sie auch von der Linux Standard Base (LSB) in Kapitel 8.5 (in LSB 2.1) vorgeschlagen wird:

Kommentare (Insgesamt: 0 || Kommentieren )
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung