Vorige: , Nach oben: Dienste definieren   [Inhalt][Index]


10.17.4 Shepherd-Dienste

Das Modul (gnu services shepherd) gibt eine Methode an, mit der Dienste definiert werden können, die von GNU Shepherd verwaltet werden, was das Initialisierungssystem (das „init“-System) ist — es ist der erste Prozess, der gestartet wird, wenn das System gebootet wird, auch bekannt als PID 1 (siehe Einführung in The GNU Shepherd Manual).

Dienste unter dem Shepherd können voneinander abhängen. Zum Beispiel kann es sein, dass der SSH-Daemon erst gestartet werden darf, nachdem der Syslog-Daemon gestartet wurde, welcher wiederum erst gestartet werden kann, sobald alle Dateisysteme eingebunden wurden. Das einfache Betriebssystem, dessen Definition wir zuvor gesehen haben (siehe Das Konfigurationssystem nutzen), ergibt folgenden Dienstgraphen:

Typischer Shepherd-Dienstgraph

Sie können so einen Graphen tatsächlich für jedes Betriebssystem erzeugen lassen, indem Sie den Befehl guix system shepherd-graph benutzen (siehe guix system shepherd-graph).

Der %shepherd-root-service ist ein Dienstobjekt, das diesen Prozess mit PID 1 repräsentiert. Der Dienst hat den Typ shepherd-root-service-type. Sie können ihn erweitern, indem Sie eine Liste von <shepherd-service>-Objekten an ihn übergeben.

Datentyp: shepherd-service

Der Datentyp, der einen von Shepherd verwalteten Dienst repräsentiert.

provision

Diese Liste von Symbolen gibt an, was vom Dienst angeboten wird.

Das bedeutet, es sind die Namen, die an herd start, herd status und ähnliche Befehle übergeben werden können (siehe Invoking herd in The GNU Shepherd Manual). Siehe den provides-Slot in The GNU Shepherd Manual für Details.

requirement (Vorgabe: '())

Eine Liste von Symbolen, die angegeben, von welchen anderen Shepherd-Diensten dieser hier abhängt.

one-shot? (Vorgabe: #f)

Gibt an, ob dieser Dienst nur einmal ausgeführt wird („one-shot“). Einmalig ausgeführte Dienste werden gestoppt, sobald ihre start-Aktion abgeschlossen wurde. Siehe Slots of services in The GNU Shepherd Manual für weitere Informationen.

respawn? (Vorgabe: #t)

Ob der Dienst neu gestartet werden soll, nachdem er gestoppt wurde, zum Beispiel wenn der ihm zu Grunde liegende Prozess terminiert wird.

start
stop (Vorgabe: #~(const #f))

Die Felder start und stop beziehen sich auf Shepherds Funktionen zum Starten und Stoppen von Prozessen (siehe Service De- and Constructors in The GNU Shepherd Manual). Sie enthalten G-Ausdrücke, die in eine Shepherd-Konfigurationdatei umgeschrieben werden (siehe G-Ausdrücke).

actions (Vorgabe: '())

Dies ist eine Liste von shepherd-action-Objekten (siehe unten), die vom Dienst zusätzlich unterstützte Aktionen neben den Standardaktionen start und stop angeben. Hier aufgeführte Aktionen werden als herd-Unterbefehle verfügbar gemacht:

herd Aktion Dienst [Argumente…]
auto-start? (Vorgabe: #t)

Ob dieser Dienst automatisch durch Shepherd gestartet werden soll. Wenn es auf #f steht, muss der Dienst manuell über herd start gestartet werden.

documentation

Eine Zeichenkette zur Dokumentation, die angezeigt wird, wenn man dies ausführt:

herd doc Dienstname

wobei der Dienstname eines der Symbole aus der provision-Liste sein muss (siehe Invoking herd in The GNU Shepherd Manual).

modules (Vorgabe: %default-modules)

Dies ist die Liste der Module, die in den Sichtbarkeitsbereich geladen sein müssen, wenn start und stop ausgewertet werden.

Datentyp: shepherd-action

Dieser Datentyp definiert zusätzliche Aktionen, die ein Shepherd-Dienst implementiert (siehe oben).

name

Die Aktion bezeichnendes Symbol.

documentation

Diese Zeichenkette ist die Dokumentation für die Aktion. Sie können sie sehen, wenn Sie dies ausführen:

herd doc Dienst action Aktion
procedure

Dies sollte ein G-Ausdruck sein, der zu einer mindestens ein Argument nehmenden Prozedur ausgewertet wird. Das Argument ist der „running“-Wert des Dienstes (siehe Slots of services in The GNU Shepherd Manual).

Das folgende Beispiel definiert eine Aktion namens sag-hallo, die den Benutzer freundlich begrüßt:

(shepherd-action
  (name 'sag-hallo)
  (documentation "Sag Hallo!")
  (procedure #~(lambda (running . args)
                 (format #t "Hallo, Freund! Argumente: ~s\n"
                         args)
                 #t)))

Wenn wir annehmen, dass wir die Aktion zum Dienst beispiel hinzufügen, können Sie Folgendes ausführen:

# herd sag-hallo beispiel
Hallo, Freund! Argumente: ()
# herd sag-hallo beispiel a b c
Hallo, Freund! Argumente: ("a" "b" "c")

Wie Sie sehen können, ist das eine sehr ausgeklügelte Art, Hallo zu sagen. Siehe Service Convenience in The GNU Shepherd Manual für mehr Informationen zu Aktionen.

Scheme-Variable: shepherd-root-service-type

Der Diensttyp für den Shepherd-„Wurzeldienst“ — also für PID 1.

This is the service type that extensions target when they want to create shepherd services (siehe Diensttypen und Dienste, for an example). Each extension must pass a list of <shepherd-service>. Its value must be a shepherd-configuration, as described below.

Data Type: shepherd-configuration

This data type represents the Shepherd’s configuration.

shepherd (default: shepherd)

The Shepherd package to use.

services (default: '())

A list of <shepherd-service> to start. You should probably use the service extension mechanism instead (siehe Shepherd-Dienste).

The following example specifies the Shepherd package for the operating system:

(operating-system
  ;; ...
  (services (append (list openssh-service-type))
            ;; ...
            %desktop-services)
  ;; ...
  ;; Use own Shepherd package.
  (essential-services
   (modify-services (operating-system-default-essential-services
                     this-operating-system)
     (shepherd-root-service-type config => (shepherd-configuration
                                            (inherit config)
                                            (shepherd my-shepherd))))))
Scheme-Variable: %shepherd-root-service

Dieser Dienst repräsentiert PID 1.


Vorige: , Nach oben: Dienste definieren   [Inhalt][Index]