Précédent: , Monter: Définir des services   [Table des matières][Index]


8.17.4 Services Shepherd

Le module (gnu services shepherd) fournit une manière de définir les services gérés par le GNU Shepherd, qui est le système d’initialisation — le premier processus démarré lorsque le système démarre, aussi connu comme étant le PID 1 (voir Introduction dans The GNU Shepherd Manual).

Les services dans le Shepherd peuvent dépendre les uns des autres. Par exemple, le démon SSH peut avoir besoin d’être démarré après le démon syslog, qui à son tour doit être démarré après le montage des systèmes de fichiers. Le système d’exploitation simple déclaré précédemment (voir Utiliser le système de configuration) crée un graphe de service comme ceci :

Graphe de service typique du shepherd.

Vous pouvez générer un tel graphe pour n’importe quelle définition de système d’exploitation avec la commande guix system shepherd-graph (voir guix system shepherd-graph).

La variable %shepherd-root-service est un objet de service représentant le PID 1, de type shepherd-root-service-type ; il peut être étendu en lui passant des listes d’objets <shepherd-service>.

Type de données : shepherd-service

Le type de données représentant un service géré par le Shepherd.

provision

C’est une liste de symboles dénotant ce que le service fournit.

Ce sont les noms qui peuvent être passés à herd start, herd status et les commandes similaires (voir Invoking herd dans The GNU Shepherd Manual). Voir the provides slot dans The GNU Shepherd Manual, pour plus de détails.

requirement (default: '())

Liste de symboles dénotant les services du Shepherd dont celui-ci dépend.

one-shot? (par défaut : #f)

Indique si ce service est ponctuel. Les services ponctuels s’arrêtent immédiatement à la fin de leur action start. Voir Slots of services dans The GNU Shepherd Manual, pour plus d’infos.

respawn? (par défaut : #t)

Indique s’il faut redémarrer le service lorsqu’il s’arrête, par exemple si le processus sous-jacent meurt.

start
stop (par défaut : #~(const #f))

Les champs start et stop se réfèrent à la capacité du Shepherd de démarrer et d’arrêter des processus (voir Service De- and Constructors dans The GNU Shepherd Manual). Ils sont donnés comme des G-expressions qui sont étendues dans le fichier de configuration du Shepherd (voir G-Expressions).

actions (par défaut : '())

C’est une liste d’objets shepherd-action (voir plus bas) définissant des actions supportées par le service, en plus des actions start et stop standards. Les actions listées ici sont disponibles en tant que sous-commande de herd :

herd action service [arguments…]
auto-start? (default: #t)

Whether this service should be started automatically by the Shepherd. If it is #f the service has to be started manually with herd start.

documentation

Une chaîne de documentation, montrée lorsqu’on lance :

herd doc service-name

service-name est l’un des symboles dans provision (voir Invoking herd dans The GNU Shepherd Manual).

modules (par défaut : %default-modules)

C’est la liste des modules qui doivent être dans le contexte lorsque start et stop sont évalués.

Type de données : shepherd-action

C’est le type de données qui définie des actions supplémentaires implémentées par un service Shepherd (voir au-dessus).

name

Symbole nommant l’action.

documentation

C’est une chaîne de documentation pour l’action. Elle peut être consultée avec :

herd doc service action action
procedure

Cela devrait être une gexp qui s’évalue en une procédure à au moins un argument, la « valeur de lancement » du service (voir Slots of services dans The GNU Shepherd Manual).

L’exemple suivant définie une action nommée dire-bonjour qui salue amicalement l’utilisateur :

(shepherd-action
  (name 'dire-bonjour)
  (documentation "Dit salut !")
  (procedure #~(lambda (running . args)
                 (format #t "Salut, l'ami ! arguments : ~s\n"
                         args)
                 #t)))

En supposant que cette action est ajoutée dans le service example, vous pouvez écrire :

# herd dire-bonjour example
Salut, l'ami ! arguments : ()
# herd dire-bonjour example a b c
Salut, l'ami ! arguments : ("a" "b" "c")

Comme vous pouvez le voir, c’est une manière assez sophistiquée de dire bonjour. Voir Service Convenience dans The GNU Shepherd Manual, pour plus d’informations sur les actions.

Variable Scheme : shepherd-root-service-type

Le type de service pour le « service racine » du Shepherd — c.-à-d. le PID 1.

C’est le type de service que les extensions ciblent lorqu’elles veulent créer un service shepherd (voir Types service et services, pour un exemple). Chaque extension doit passer une liste de <shepherd-service>.

Variable Scheme : %shepherd-root-service

Ce service représente le PID 1.


Précédent: , Monter: Définir des services   [Table des matières][Index]