Zeigefinger

Dank dieser Arbeitsteilung muss man einfach nur ein Startskript für einen Dienst schreiben und es im Verzeichnis rc5.d platzieren, um den Dienst beim nächsten Systemstart automatisch anzuwerfen (siehe auch Kasten "Eigenes Startskript"). Dieser Komfort hat aber auch einen Nachteil: Möchte man den Dienst in verschiedenen Runleveln anbieten, gilt es das Skript in alle entsprechende Unterverzeichnisse zu kopieren, hinzu kommen noch die Stoppskripte. Es kommt noch dicker: Bei Änderungen muss man alle Kopien anpassen.

Diese umständliche und fehleranfällige Prozedur vermeiden die Distributionen, indem Sie für jeden Dienst nur ein einziges Skript im Verzeichnis /etc/init.d ablegen. Für das Drucksystem zeichnet beispielsweise cups verantwortlich. Auf diese zentralen Skripte zeigen dann wiederum in den Unterverzeichnissen rc0.d bis rc6.d entsprechende symbolische Verweise.

Unter dem Strich startet also der Linux-Kernel das Programm Init, das wiederum das Skript /etc/init.d/rc 5 aufruft, welches gemäß seines Parameters in das Verzeichnis rc5.d wechselt und dort allen mit S beginnenden symbolischen Verweisen folgt. Dabei stößt es auch auf den symbolischen Verweis namens S09cups, über den es wiederum zum Skript /etc/init.d/cups gelangt, das nun endlich den CUPS-Daemon startet.

Das funktioniert zwar recht gut, ist aber zumindest für Einsteiger etwas verwirrend. Zu allem Überfluss weichen die Verzeichnisnamen von Distribution zu Distribution auch noch ab: So liegen alle symbolischen Links für den Runlevel 5 unter Debian im Verzeichnis /etc/rc5.d, bei OpenSuse 11.3 dagegen in /etc/init.d/rc5.d.

Erste Hilfe

Um einen störenden Dienst vom Systemstart auszuschließen, müssen Sie lediglich seinen symbolischen Verweis aus dem passenden Unterverzeichnis löschen. Um solche Wartungsarbeiten etwas komfortabler zu gestalten, spendieren die meisten Distributionen entsprechende Hilfsprogramme. Besonders häufig trifft man auf das Werkzeug chkconfig, das unter anderem OpenSuse 11.3 beiliegt.

Der als Benutzer root abgesetzte Befehl chkconfig --list zeigt wie in Abbildung 3 an, in welchen Runleveln welche Dienste aktiv sind (on) und in welchen nicht (off).

Abbildung 3: chkconfig --list liefert die Dienste aller Runlevel.

Um das ALSA-Soundsystem zunächst aus allen Runleveln zu verbannen und es anschließend nur in den Runleveln 3 und 5 wieder zu aktivieren, geben Sie als root die folgenden beiden Befehle ein:

# chkconfig --del alsasound
# chkconfig -f alsasound 35

Unter Debian entfernen Sie mit den zwei folgenden Befehlen zunächst den Druckdienst Cups aus allen Runleveln und reaktivieren ihn anschließend nur für die Standard-Runlevel 2 bis 5:

# update-rc.d cups remove
# update-rc.d cups default

Für noch mehr Komfort sorgen grafische Werkzeuge, wie etwa unter OpenSuse 11.3 das YaST-Modul Systemdienste (Runlevel) aus der Rubrik System (Abbildung 4). Dort legen Sie im Expertenmodus für jeden Dienst per Mausklick fest, in welchem Runlevel er starten soll. Dazu markieren Sie ihn in der Liste und haken dann am unteren Rand den entsprechenden Runlevel an.

Abbildung 4: Das YaST-Modul Systemdienste (Runlevel) erlaubt unter OpenSuse einen bequemen Eingriff in die Runlevel.

Die Startskripte unter /etc/init.d dürfen Sie als Root auch direkt aufrufen und somit gezielt einzelne Dienste ausschalten oder aktivieren. Beispielsweise stoppt sudo /etc/init.d/cups stop das Drucksystem, sudo /etc/init.d/cups start aktiviert es wieder. Viele der Skripte verstehen zudem noch die Parameter restart und status. Der erste startet den zugehörigen Dienst neu, während status Informationen über ihn ausspuckt (Abbildung 5).

Abbildung 5: Der Parameter status verrät meist nur, ob der Dienst gerade läuft.

Eigenes Startskript

Möchten Sie einen eigenen Dienst automatisch beim Booten mitstarten lassen, gilt es dazu ein passendes Skript zu schreiben. Dieses muss zumindest die Parameter start und stop auswerten, mit denen /etc/init.d/rc das Skript je nach Situation aufruft. Ein minimales Gerüst für ein solches Skript sieht etwa so aus wie in Listing 2.

Die Kommentare am Anfang bilden den so genannten Init-Infoblock [2]. Ihn werten verschiedene Hilfsprogramme aus. Hinter Provides: steht der Name des Dienstes. Default-Start: nennt die Runlevel, in denen er verfügbar sein soll, Default-Stop: jene, in denen er nicht laufen darf. Hinter Required-Start: stehen die Dienste, die der vorliegende zum Funktionieren benötigt. Anhand dieser Angabe können die Werkzeuge gleich die korrekte Startreihenfolge der Dienste ermitteln. Bei $network handelt es sich um ein spezielles Schlüsselwort, das praktischerweise mehrere Netzwerkdienste zusammenfasst.

Das fertige Skript speichern Sie unter einem passenden Namen (in diesem Fall meindienst) im Verzeichnis /etc/init.d und machen es ausführbar:

chmod 755 /etc/init.d/meindienst

Jetzt fehlen nur noch die passenden Verweise in den Unterverzeichnissen. Die meisten Distributionen bringen ein kleines Werkzeug mit, das diese erzeugt. Unter OpenSuse 11.3 reicht beispielsweise ein insserv meindienst, unter Debian update-rc.d meindienst. Müssen Sie mangels Helfer die Verweise per Hand anlegen, sollten Sie für den Dateinamen eine möglichst hohe Nummer verwenden, wie etwa S99meindienst. Auf diese Weise zerstören Sie nicht die von der Distribution vorgegebene Bootreihenfolge.

Listing 2

###BEGIN INIT INFO
# Provides: meindienst
# Required-Start: $network
# Required-Stop:
# Default-Start: 3 5
# Default-Stop: 0 1 2 6
# Description: Startet meindienst
###END INIT INFO
#!/bin/bash
case "$1" in
  start)
    echo "Starte meindienst"
    /usr/bin/meindienst &
    ;;
  stop)
    echo "Beende meindienst"
    killall meindienst
    ;;
esac

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Systeminitialisierung und Runlevel
    Zwischen dem Einschalten des Computers und dem Einloggen der Benutzer arbeitet das Programm init als erster Prozess. Es initialisiert das System, weckt Daemons wie crond oder syslogd und legt den Runlevel fest, den der Anwender vorfindet.
  • Durchstarten
    Beim Wettstreit zwischen dem klassischen Init und dem recht jungen Systemd trifft jahrzehntelang gewachsene Technik auf neue Konzepte.
  • Präzise Kontrolle
    Auf einem typischen Linux-System laufen viele Anwendungen und Dienste gleichzeitig. Mit den richtigen Befehlen verschaffen Sie sich einen Überblick und greifend steuernd ein.
  • Von init an
    Nach dem Einschalten zeigt ein Computer viele kryptische Nachrichten an, bevor er sich mit dem Login-Bildschirm bereit meldet. Wir zeigen, was im Hintergrund des Boot-Vorgangs abläuft.
  • Bootvorgang 2. Anlauf
Kommentare

Infos zur Publikation

LU 12/2017: Perfekte Videos

Digitale Ausgabe: Preis € 5,95
(inkl. 19% MwSt.)

LinuxUser erscheint monatlich und kostet 5,95 Euro (mit DVD 8,50 Euro). Weitere Infos zum Heft finden Sie auf der Homepage.

Das Jahresabo kostet ab 86,70 Euro. Details dazu finden Sie im Computec-Shop. Im Probeabo erhalten Sie zudem drei Ausgaben zum reduzierten Preis.

Bei Google Play finden Sie digitale Ausgaben für Tablet & Smartphone.

HINWEIS ZU PAYPAL: Die Zahlung ist ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!

Stellenmarkt

Aktuelle Fragen

Broadcom Adapter 802.11n nachinstallieren
Thomas Mengel, 31.10.2017 20:06, 2 Antworten
Hallo, kann man nachträglich auf einer Liveversion, MX Linux auf einem USB-Stick, nachträglich...
RUN fsck Manually / Stromausfall
Arno Krug, 29.10.2017 12:51, 1 Antworten
Hallo, nach Absturz des Rechners aufgrund fehlendem Stroms startet Linux nicht mehr wie gewohn...
source.list öffnet sich nicht
sebastian reimann, 27.10.2017 09:32, 2 Antworten
hallo Zusammen Ich habe das problem Das ich meine source.list nicht öffnen kann weiß vlt jemman...
Lieber Linux oder Windows- Betriebssystem?
Sina Kaul, 13.10.2017 16:17, 6 Antworten
Hallo, bis jetzt hatte ich immer nur mit
IT-Kurse
Alice Trader, 26.09.2017 11:35, 2 Antworten
Hallo liebe Community, ich brauche Hilfe und bin sehr verzweifelt. Ih bin noch sehr neu in eure...