Galileo Computing < openbook >
Galileo Computing - Bücher zur Programmierung und Softwareentwicklung
Galileo Computing - Bücher zur Programmierung und Softwareentwicklung


'Wie werde ich Unix-Guru' als Buch bestellen
A. Willemer
Wie werde ich UNIX-Guru
I  ANWENDUNG
Know-How für Unix/Linux-User: Einführung, Shell, Befehle, Hilfe, Arbeit mit Dateien, Editoren, Reguläre Ausdrücke, nützliche Tools, Hardware.

II  ADMINISTRATION
Tools, Systemstart, Benutzer verwalten, Hardware konfigurieren, Software installieren, Datensicherung, Tuning, Kernel

III  NETZWERK
Client/Server Systeme, TCP/IP, Routing, IPv6, Internet-Dienste, DHCP, Webserver, Firewalls

IV  DAS X-WINDOW SYSTEM
Die grafische Oberfläche von UNIX einrichten und nutzen

V  PROGRAMMIERUNG VON SHELLSKRIPTEN
Automatisieren von Tasks durch Shell-Skripte.

VI  PERL
Interpreter, Syntax, Variablen, Steuerung, Funktionen, UNIX-Aufrufe, GUIs mit Tk

VII  PROGRAMMIERWERKZEUGE
C-Compiler, Analyse-Tools, CVS, yacc, diff

VIII  UNIX-SYSTEMAUFRUFE
UNIX-Befehle in eigenen Programmen nutzen

IX  LITERATUR
Weiterführende Literatur zu UNIX und LINUX

 
Galileo Computing / <openbook> / "Wie werde ich UNIX-Guru ?"
« BSD: /etc/rc Start des Systems Konfigurationsdateien »

System V: init.d

Je nach System befinden sich im Verzeichnis /etc/init.d oder im Verzeichnis /sbin/init.d die Skripten für den Start der Systemprozesse, die beim Systemstart ausgeführt werden.Zum Thema Programmierung von Shellskripten siehe S. shellskript. Dabei handelt es sich ausnahmslos um Shellskripten, deren Kommandos mit einem normalen Editor bearbeitet werden können. So ist es möglich, hier mit Hilfe des Kommandos grep nach dem Start von bestimmten Prozessen zu suchen.

Um die Runlevel zu initialisieren, gibt es für jeden ein eigenes Verzeichnis rcX.d. Dabei steht X für den jeweiligen Runlevel. In jedem der Runlevelverzeichnisse befinden sich ausschließlich symbolische Links auf die eben betrachteten Startskripten. Es existiert immer dann ein symbolischer Link, wenn beim Übergang in den jeweiligen Runlevel das Skript ausgeführt werden soll. Dabei haben alle Links ein Präfix S oder K, gefolgt von zwei Ziffern. Das Skript mit dem Präfix S soll die Prozesse starten, und K soll sie beenden (K wie kill). Die Ziffern sorgen dafür, dass die Prozesse in der richtigen Reihenfolge gestartet werden. Beispielsweise heißen die Links in rc2.d für apache, den Webserver, S20apache und K20apache. Das erste Link wird beim Eintreten in den Runlevel 2 und der andere beim Verlassen des Runlevels aufgerufen. Die Nummer 20 bezeichnet die Reihenfolge. S19 wird beispielsweise vor S20apache aufgerufen. Muss also der neue Dienst vor dem Webserver starten, sollte S19 als Präfix verwendet werden. Braucht der neue Server allerdings die Anwesenheit von Apache, sollte der Name des Links mit S21 oder höher beginnen.

Man schreibt ein Startskript, das als Parameter die Wörter start und stop verarbeitet. Einige dieser Skripten verarbeiten auch das Kommando restart. Ein solches Skript, das man zunächst im Verzeichnis init.d ablegt, besteht aus einer großen case-Anweisung. Als Beispiel soll der Dienst unfug gestartet werden. Der Dienst unfug wird durch das Programm unfugd gestartet. Als Startskript erstellt man eine Datei namens unfug und stellt sie in das Verzeichnis /sbin/init.d:

#! /bin/sh
test -f /usr/bin/unfugd || exit 0
case "$1" in
    start)
        echo "Starte Unfug-Daemon"
        /usr/bin/unfugd
        ;;
    stop)
        echo "Stoppe Unfug-Daemon"
        kill `cat /var/run/unfugd.pid`
        ;;
    restart)
        echo "Restart Unfug"
        kill `cat /var/run/unfugd.pid`
        /usr/bin/unfugd
        ;;
    *)
        echo "usage:  MATH
 $0 start | stop | restart"
        exit 1
        ;;
esac$

In der ersten Zeile wird festgelegt, dass dieses Skript von der einfachen Bourne Shell gestartet wird. Die zweite Zeile testet, ob es das Programm unfugd im Verzeichnis /usr/bin überhaupt gibt. Ist das nicht der Fall, endet das Skript hier mit der Fehlernummer 0. Es ist ja kein wirklicher Fehler aufgetreten. Es gibt nur einfach nichts zum Starten. Die case-Anweisung untersucht die Variable $1, die für den ersten Parameter steht, und verzweigt auf start, stop, restart oder auf den Stern, mit dem alle anderen möglichen Werte gemeint sind.

Bei start gibt es eine kurze Meldung, und dann wird das Programm unfugd gestartet. Dämonen haben die Eigenart, von selbst in den Hintergrund zu gehen. Darum ist an dieser Stelle ein & nicht erforderlich. unfugd schreibt seine Prozess-ID in die Datei /var/run/unfugd.pid. Das macht es beim Herunterfahren einfacher, den Prozess wieder zu beenden. Beim stop wird nämlich genau dort das Argument für den Befehl kill ausgelesen. Beim restart wird unfugd erst beendet und dann neu gestartet. Bei vielen Dämonen hätte auch ein kill -SIGHUP ausgereicht. restart wird nicht für das Booten oder Herunterfahren gebraucht, ist aber sehr praktisch, wenn man den Dämon konfigurieren will. Der Stern sorgt einfach dafür, dass jemand, der das Skript falsch aufruft, auch einen Hinweis bekommt, was falsch ist.

Startskripten sollten sehr sorgfältig erstellt werden. Dabei ist ein Abbruch nicht einmal so dramatisch. Falls aber ein Startskript hängen bleibt oder in einer Endlosschleife verharrt, bleibt der Rechner beim Booten stehen. In einer solchen Situation brauchen Sie eine Möglichkeit, den Computer von einem anderen Bootmedium zu starten. Anschließend binden Sie die Platte per mount (siehe S. mount) ein und können dann das Skript löschen oder sogar bearbeiten.

Ausführliche Informationen über das Schreiben von Shellskripten und die verwendeten Anweisungen folgen später (siehe S. shellskript). Will man ein Skript beim Systemstart hochfahren, muss man zunächst überlegen, in welchem Runlevel es gestartet werden soll, und dann mit den anderen Links vergleichen, zu welchem Zeitpunkt es gestartet werden muss.

Nachdem nun das Skript unfug in init.d liegt, muss man es noch mit chmod 755 ausführbar machen. Zuletzt wird es an passender Stelle in ein rcX.d-Verzeichnis verlinkt. Der Unfug soll erst nach dem apache starten und vor diesem herunterfahren. Also verwendet man das Verzeichnis rc2.d und erzeugt einen Link mit S21 und einen mit K19:

cd rc2.d
ln -s ../unfug S21unfug
ln -s ../unfug K19unfug

Die Ausgabemeldungen des letzten Bootprozesses werden normalerweise in einer eigenen Datei protokolliert. Unter HP-UX ist das /etc/rc.log, unter Linux /var/log/boot.msg.



« BSD: /etc/rc | Start des Systems | Konfigurationsdateien »
 
 Zum Katalog
Zum Katalog
Wie werde ich UNIX-Guru?
bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 UNIX/Linux

PHP 4-Workshop

Einstieg in Python

Perl fürs Web

MySQL 4

GNOME 2.0
 Empfehlung

Einstieg in XML
 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
Info

 MyGalileo
Der Service für registrierte Leser:
Zu MyGalileo
Info



Copyright © Galileo Press GmbH 2003
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.
[Galileo Computing]

Galileo Press GmbH, Gartenstraße 24, 53229 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de