[linux-l] init.d

Volker Grabsch vog at notjusthosting.com
Di Jan 16 10:26:41 CET 2007


On Tue, Jan 16, 2007 at 12:47:59AM +0100, Olaf Radicke wrote:
> Ich muss gestehen, das ich mich in den 7 Jahren den ich mich mit Linux 
> beschäftige noch nie mit init.d/ auseinander gesetzt habe. Meine Frage: 
> Wie funktioniert das?
> Ein Link zu einer knappen Zusammenfassung würde mir schon fast reichen.

Ich kenne keine solche Anleitung. Es ist aber auch nicht weiter schwer.
Meine Ausführungen beschränken sich auf Debian.

Jedes Script in /etc/init.d/ versteht die Parameter:
    start
    stop
    restart
    reload
    ...
Entsprechend starten sie ihr Programm, halten es an, u.s.w.
Willst du selbst eines schreiben, sorg einfach dafür, dass es diese
Parameter versteht. Mehr wird nicht verlangt.

Von diesen Scripten werden Symlinks angelegt in die Verzeichnisse:
    /etc/rc0.d/
    /etc/rc1.d/
    /etc/rc2.d/
    ...
Das erste steht für Runlevel 0, das zweite für Runlevel 1, u.s.w.
Die Symlinks in den Verzeichnissen heißen fast genauso wie die
init.d-Scripte. Jedoch wird ihrem Namen unter anderem ein K oder
ein S vorangestellt, für "kill" und "start".

Wechselst du z.B. in das Runlevel 2, dann werden zuerst alle
Scripte der Form
    /etc/rc0.d/K*
mit Parameter "stop" aufgerufen. Danach werden alle Scripte der Form
    /etc/rc0.d/S*
mit Parameter "start" aufgerufen.

Bleibt nur noch die Frage der Reihenfolge. Da ist festgelegt: Die
Scripte werden in alphabetischer Reihenfolge gestartet. Deshalb
gibt man den Symlinks im Namen noch eine Nummer mit, damit ihre
Reihenfolge stimmt. Bei mir sieht das /etc/rc2.d/ Verzeichnis
entsprechend so aus:

    K11anacron
    ...
    S09hsf
    S10sysklogd
    ...

Zusammenfassung:
    Der erste Buchstabe gibt an, ob's gestartet oder gestoppt wird.
    Die Zahl danach legt die start/stop-Reihenfolge fest.
    Eine Datei wie S10sysklogd ist ein Symlink auf /etc/init.d/sysklogd.

Ich habe viele Details weggelassen, aber zur Einführung sollte das
reichen.

> Ich lasse aus Bequemlichkeit von init.d meine Postgres-DB hochfahren. 
> Beider Standartkonfiguration für init.d (der PG-DB) fehlt aber der 
> Parameter "-i". ich hatte mich durch das shell-Skript gewühlt und 
> einfach auf Verdacht an dieser und jener stelle ein "-i" 
> reingeschrieben bis es funktioniert hat.

Das ist keine gute Idee. Falscher Ansatz!

Die Init-Scripte sind nicht zum Bearbeiten gedacht. Man setzt höchstens
andere Symlinks, um sie zu unterschiedlichen Zeitpunkten / Runlevels zu
starten. Aber man editiert sie nicht.

Wenn ein Init-Script zusätzliche Parameter braucht, inkludiert es diese
aus einer Datei in
    /etc/default/

Zum Beispiel findest du in /etc/init.d/ssh:
    # Options to pass to sshd
    SSHD_OPTS=

Es werden dort auch gern Umgebungsvariablen gesetzt, die der
entsprechende Daemon benötigt.

Im Init-Script von PostgreSQL ist das nicht vorgesehen. Es gibt also
(leider?) keine /etc/default/postgresql. Die ist aber auch nicht
nötig, denn in PostgreSQL kannst du sämtliche Einstellungen in den
Konfigurationsdateien unter /etc/postgresql/ tätigen.


Viele Grüße,

    Volker

-- 
Volker Grabsch
---<<(())>>---
Administrator
NotJustHosting GbR



Mehr Informationen über die Mailingliste linux-l