Init-Skripte für Debian/GNU Linux

Das englische Original gibt es bei www.debian-administration.org

Um beim beim Wechsel zwischen System-Runlevels, z. B. beim Booten oder Herunterfahren, Kommandos auszuführen, kommt bei Debian/GNU Linux ein Sys-V-ähnliches Init-System zum Einsatz.

Um einen einen neuen Service während des Bootvorgangs zu starten, sollte das notwendige Skript im Verzeichnis /etc/init.d gespeichert werden. In dem Verzeichnis befinden sich bereits zahlreiche Skripte, an denen man sich ein Beispiel nehmen kann.

Im Folgenden ein sehr einfaches Skript, das in zwei Abschnitte unterteilt ist:

  1. Code, der immer ausgeführt wird
  2. Code, der nur ausgeführt wird, wenn das Script mit "start" oder "stop" aufgerufen wird
#! /bin/sh
# /etc/init.d/blafasel
#

# Das hier wird immer ausgefuehrt:
touch /var/lock/dingsbums

# Bestimmte Funktionen ausfuehren, wenn danach gefragt wird:
case "$1" in
  start)
    echo "Skript blafasel wird gestartet... "
    echo "Hier koennte auch mehr passieren."
    ;;
  stop)
    echo "Skript blafasel wird gestoppt... "
    echo "Hier koennte auch noch viel mehr passieren."
    ;;
  *)
    echo "Benutzung: /etc/init.d/blafasel {start|stop}"
    exit 1
    ;;
esac

exit 0

Nachdem das Skript im richtigen Verzeichnis gespeichert ist, muss dafür gesorgt werden, dass es ausführbar ist:

lexi:~# chmod 755 /etc/init.d/blafasel

Entsprechende symbolische Links sorgen dafür, dass das Skript beim Bootvorgang oder beim Herunterfahren ausgeführt wird. Der einfachste Weg diese Links zu erzeugen ist das Debian-spezifische Kommando update-rc.d:

lexi:~# update-rc.d blafasel defaults
 Adding system startup for /etc/init.d/blafasel ...
   /etc/rc0.d/K20blafasel -> ../init.d/blafasel
   /etc/rc1.d/K20blafasel -> ../init.d/blafasel
   /etc/rc6.d/K20blafasel -> ../init.d/blafasel
   /etc/rc2.d/S20blafasel -> ../init.d/blafasel
   /etc/rc3.d/S20blafasel -> ../init.d/blafasel
   /etc/rc4.d/S20blafasel -> ../init.d/blafasel
   /etc/rc5.d/S20blafasel -> ../init.d/blafasel

Um das Skript wieder aus dem Bootvorgang zu entfernen:

lexi:~# update-rc.d -f  blafasel remove
update-rc.d: /etc/init.d/blafasel exists during rc.d purge (continuing)
 Removing any system startup links for /etc/init.d/blafasel ...
   /etc/rc0.d/K20blafasel
   /etc/rc1.d/K20blafasel
   /etc/rc2.d/S20blafasel
   /etc/rc3.d/S20blafasel
   /etc/rc4.d/S20blafasel
   /etc/rc5.d/S20blafasel
   /etc/rc6.d/K20blafasel

Dadurch bleibt das Skript selber an Ort und Stelle. Es werden lediglich die Links entfernt, die das automatische Ausführen bewirken.

Weitere Informationen sind mit dem Kommando "man update-rc.d" abrufbar.