La lecture man 5 systemd.unit
et man 5 systemd.target
nous indique que les fichiers d'unité sont utilisés pour définir les cibles ainsi que tout le reste systemd. Il n'y a pas de documentation spécifique sur la façon de créer une cible , il est donc difficile de déterminer comment cela doit être fait, mais ce n'est pas trop différent de la création d'un service.
Lorsque vous créez votre cible, vous devrez créer des liens symboliques vers le target.wants
répertoire à partir du répertoire des services systemd. Ensuite, vous pouvez définir / démarrer votre cible. Voici à quoi cela pourrait ressembler compte tenu de votre exemple.
/etc/systemd/system/foo.target
Il s'agit du fichier d'unité de la cible. Si graphical.target est pris comme exemple, nous pouvons créer notre propre cible en l'utilisant comme base.
[Unit]
Description=Foobar boot target
Requires=multi-user.target
Wants=foobar.service
Conflicts=rescue.service rescue.target
After=multi-user.target rescue.service rescue.target
AllowIsolate=yes
Pour expliquer les options tirées des pages de manuel systemd;
Description
- Décrit la cible. Vous devriez comprendre
Requires
- Dépendances dures de la cible. Vous devez laisser le système de base démarrer avant de démarrer vos propres services
Wants
- Dépendances douces. La cible n'a pas besoin de ceux-ci pour démarrer.
Conflicts
- Si une unité a un paramètre Conflits sur une autre unité, le démarrage de la première arrêtera la seconde et vice versa.
After
- Bottes après ces services
AllowIsolate
- Vraiment à vous et à votre environnement. Les détails sont disponibles dans la page de manuelsystemd.unit(5)
/etc/systemd/system/foo.target.wants/
Il s'agit du répertoire où vous lierez les services que vous créez / exigez pour votre cible. C'est l'équivalent de l' Wants=
option dans le fichier d'unité. Créez ce répertoire, puis créez des liens symboliques comme ceci; ln -s /usr/lib/systemd/system/bar.service /etc/systemd/system/foo.target.wants/bar.service
. Cela crée un lien symbolique de bar.service dans le répertoire système vers votre répertoire foo.target.wants.
Je pense que la création d'un fichier d'unité pour un service est en quelque sorte hors de la portée de cette réponse, et cette question est certainement plus documentée, je vais donc laisser cela de côté pour l'instant. Lorsque vous créez votre fichier d'unité, il suffit de le lier symboliquement dans le répertoire target.wants ou de l'ajouter à la Wants=
directive.
foo.target
auRequires
champ et auBefore
champ demulti-user.target
, et il aimeRequires: base.target foo.target
. Après cela, je redémarre mon Arch Linux vm etfoobar.service
je fonctionnerai automatiquement en tant que démon.