11.5. Start von Diensten

Beigetragen von Tom Rhodes.

Viele Benutzer installieren Software Dritter auf FreeBSD mithilfe der Ports-Collection. Häufig soll die Software bei einem Systemstart mitgestartet werden. Beispielsweise sollen die Dienste mail/postfix oder www/apache13 nach einem Systemstart laufen. Dieser Abschnitt stellt die Startprozeduren für Software Dritter vor.

Unter FreeBSD werden die meisten der im System enthaltenen Dienste wie cron(8) mithilfe von Systemskripten gestartet. Diese Skripten sind abhängig von der FreeBSD- oder Hersteller-Version. Allerdings kann ein Dienst mit einfachen Skripten gestartet werden.

Früher legten Anwendungen einfach ein Startskript im Verzeichnis /usr/local/etc/rc.d ab. Das Startskript wurde von den Systemskripten in den letzten Phasen des Systemstarts ausgeführt.

Obwohl viele Startskripten auf das neue System umgestellt wurden, gibt es noch Anwendungen, die ein Startskript im eben erwähnten Verzeichnis benötigen. In diesem Fall weisen die Skripte kleinere Unterschiede auf. Vor FreeBSD 5.1 wurde der alte Stil verwendet, obwohl in den meisten Fällen auch der neue Stil problemlos funktionieren würde.

Die Startskripten müssen das Suffix .sh tragen und ausführbar sein. Sie machen ein Skript ausführbar, indem Sie mit chmod die Rechte 755 vergeben. Das Skript sollte die Optionen start und stop akzeptieren, um die Anwendung zu starten und zu stoppen.

Ein einfaches Startskript sieht wie folgt aus:

#!/bin/sh
echo -n ' utility'

case "$1" in
start)
        /usr/local/bin/utility
        ;;
stop)
        kill -9 `cat /var/run/utility.pid`
        ;;
*)
        echo "Usage: `basename $0` {start|stop}" >&2
        exit 64
        ;;
esac

exit 0

Das Skript akzeptiert die Optionen start und stop zum Starten und Stoppen einer Anwendung mit Namen utility.

Manuell wird die Anwendung mit dem nachstehenden Kommando gestartet:

# /usr/local/etc/rc.d/utility.sh start

Obwohl nicht jede Anwendung die Zeile in rc.conf benötigt, akzeptieren immer mehr Ports diese Konfiguration. Prüfen Sie die Ausgaben während der Installation einer Anwendung, um herauszufinden, wie die Anwendung gestartet wird. Einige Anwendungen stellen Startskripten bereit, die zusammen rcNG (wird im nächsten Abschnitt besprochen) benutzt werden.

11.5.1. Dienste mit rcNG starten

Mit rcNG lässt sich der Start von Anwendungen besser steuern als mit den vorher besprochenen Startskripten. Mit den im Abschnitt rcNG besprochenen Schlüsselwörtern können Anwendungen in einer bestimmten Reihenfolge (zum Beispiel nach DNS) gestartet werden und Optionen können in rc.conf statt fest im Startskript der Anwendung festgelegt werden. Ein einfaches Startskript sieht wie folgt aus:

#!/bin/sh
#
# PROVIDE: utility
# REQUIRE: DAEMON
# BEFORE: LOGIN
# KEYWORD: FreeBSD shutdown

#
# DO NOT CHANGE THESE DEFAULT VALUES HERE
# SET THEM IN THE /etc/rc.conf FILE
#
utility_enable=${utility_enable-"NO"}
utility_flags=${utility_flags-""}
utility_pidfile=${utility_pidfile-"/var/run/utility.pid"}

. /etc/rc.subr

name="utility"
rcvar=`set_rcvar`
command="/usr/local/sbin/utility"

load_rc_config $name

pidfile="${utility_pidfile}"

start_cmd="echo \"Starting ${name}.\"; /usr/bin/nice -5 ${command} ${utility_flags} ${command_args}"

run_rc_command "$1"

Dieses Skript stellt sicher, dass utility vor den login-Diensten und nach den daemon-Diensten gestartet wird. Es stellt auch eine Methode bereit, die Prozess-ID (PID) der Anwendung in einer Datei zu speichern.

In /etc/rc.conf könnte für diese Anwendung die folgende Zeile stehen:

utility_enable="YES"

Die neue Methode erleichtert den Umgang mit Kommandozeilenargumenten, bindet Funktionen aus /etc/rc.subr ein, ist kompatibel zum Werkzeug rcorder(8) und lässt sich über rc.conf leichter konfigurieren. Sie könnten dieses Skript auch im Verzeichnis /etc/rc.d ablegen, das würde aber wahrscheinlich bei Aktualisierungen Probleme mit mergemaster(8) verursachen.

11.5.2. Andere Arten, um Dienste zu starten

Dienste wie POP3 oder IMAP können über den inetd(8) gestartet werden. Nach der Installation der Anwendung aus der Ports-Collection muss eine Konfigurationszeile in der Datei /etc/inetd.conf hinzugefügt oder aktiviert werden. Der Abschnitt Abschnitt 23.2 beschreibt den inetd und dessen Konfiguration.

Systemdienste können auch mit cron(8) gestartet werden. Dieser Ansatz hat einige Vorteile; nicht zuletzt, weil cron(8) die Prozesse unter dem Eigentümer der crontab startet, ist es möglich, dass Dienste von nicht-root Benutzern gestartet und gepflegt werden können.

Dies nutzt eine Eigenschaft von cron(8): Für die Zeitangabe kann @reboot eingesetzt werden. Damit wird das Kommando gestartet, wenn cron(8) kurz nach dem Systemboot gestartet wird.

Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an <de-bsd-questions@de.FreeBSD.org>.
Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an <de-bsd-translators@de.FreeBSD.org>.