6.21. Starten und Anhalten von Diensten (rc Skripten)

rc.d-Skripten werden zum Starten von Diensten während des Systemstarts verwendet und um den Administratoren einen Standardweg zum Anhalten und Starten von Diensten zu bieten. Ports halten sich an dieses systemweite rc.d-Framework. Details zu deren Benutzung können im rc.d Kapitel des Handbuchs nachgelesen werden. Ausführliche Beschreibungen der verfügbaren Befehle stehen in rc(8) und rc.subr(8). Desweiteren gibt es einen Artikel zu praktischen Aspekten bezüglich rc.d-Skripten.

Ein oder mehrere rc-Skripten können installiert werden mittels:

USE_RC_SUBR=    doormand

Skripten müssen im Unterverzeichnis files abgelegt und jeder Skript-Datei muss ein .in-Suffix hinzugefügt werden. Der einzige Unterschied zu einem rc.d-Skript aus dem Basissystem ist, dass die Zeile . /etc/rc.subr in . %%RC_SUBR%% umbenannt werden muss, da ältere Versionen von FreeBSD die Datei /etc/rc.subr nicht besitzen. Standarderweiterungen wie SUB_LIST werden ebenfalls unterstützt. Die Verwendung von %%PREFIX%% und %%LOCALBASE%% wird dringend empfohlen. Näheres zu SUB_LIST kann im zugehörigen Kapitel nachgelesen werden.

Für FreeBSD-Versionen, die älter als 6.1-RELEASE sind, ist die Integration mittels rcorder(8) möglich, indem USE_RCORDER anstatt USE_RC_SUBR verwendet wird. Die Verwendung dieser Methode wird aber nicht mehr empfohlen.

Seit FreeBSD 6.1-RELEASE sind lokale rc.d-Skripten (inklusive der durch Ports installierten) im allgemeinen rcorder(8) des Basissystems.

Beispiel eines einfachen rc.d-Skripts:

#!/bin/sh

# PROVIDE: doormand
# REQUIRE: LOGIN
#
# Add the following lines to /etc/rc.conf.local or /etc/rc.conf
# to enable this service:
#
# doormand_enable (bool):    Set to NO by default.
#                Set it to YES to enable doormand.
# doormand_config (path):    Set to %%PREFIX%%/etc/doormand/doormand.cf
#                by default.
#

. %%RC_SUBR%%

name="doormand"
rcvar=${name}_enable

command=%%PREFIX%%/sbin/${name}
pidfile=/var/run/${name}.pid

load_rc_config $name

: ${doormand_enable="NO"}
: ${doormand_config="%%PREFIX%%/etc/doormand/doormand.cf"}

command_args="-p $pidfile -f $doormand_config"

run_rc_command "$1"

Für die Wertzuweisung von Variablen sollte "=" anstatt ":=" verwendet werden, da bei Ersterem nur auf einen Standardwert gesetzt wird, wenn die Variable vorher noch nicht gesetzt war, und bei Letzterem dieser gesetzt wird, auch wenn der Wert vorher Null gewesen ist. Ein Benutzer kann durchaus einen Ausdruck wie

doormand_flags=""
in seiner rc.conf.local-Datei stehen haben, und eine Variablenzuweisung mittels ":=" würde in diesem Fall die Benutzerdefinition überschreiben.

Der Suffix des rc-Skriptes wird durch RC_SUBR_SUFFIX für die weitere Verwendung im Makefile des Ports bereitgestellt. Aktuelle Versionen von FreeBSD fügen keinen Suffix den Skriptnamen hinzu im Gegensatz zu ältere Versionen, die dies mit dem Suffix .sh taten.

Anmerkung: Es sollten keine weiteren Skripten mit der .sh-Endung hinzugefügt werden. Irgendwann wird es ein Massenumbenennen aller Skripten im Repository geben, die immer noch diese Endung haben.

6.21.1. Anhalten und Deinstallieren von Diensten

Es ist möglich, dass ein Dienst während der Deinstallation automatisch angehalten wird. Es wird empfohlen dieses Verhalten nur zu implementieren, wenn es unbedingt erforderlich ist zuerst den Dienst anzuhalten und dann die Dateien zu entfernen. Normalerweise sollte es dem Administrator überlassen werden, ob ein Dienst durch Deinstallieren angehalten werden soll. Dies betrifft auch den Vorgang des Aktualisierens.

Der Datei pkg-plist sollte eine Zeile wie folgt zugefügt werden:

@stopdaemon doormand

Das Argument muss dabei mit dem Inhalt der USE_RC_SUBR-Variablen übereinstimmen.


Fragen zum FreeBSD Ports-System richten Sie bitte an <ports@FreeBSD.org>, Fragen zu diesem Dokument hingegen an <de-bsd-translators@de.FreeBSD.org>.