Les services systemd

Écrire et piloter une unité de service : ses trois sections, ExecStart, Type, Restart, User, After, Requires, Wants, WantedBy, systemctl, les états d'une unité et journalctl -u.

  • 32 cartes
  • 5 thèmes
  • Gratuit

Le programme, thème par thème

Le poids de chaque thème suit celui que lui donne l'examen.

  1. Notions
  2. Questions
  3. Ranger et relier
  4. Mises en situation
  5. Comprendre

Quelques cartes du deck

  • Unité systemd : de quoi s'agit-il ?

    Voir la réponse

    Objet géré par systemd et décrit par un fichier de configuration : service, timer, socket, point de montage ou cible.

    Le suffixe donne le type : .service, .timer, .target. Les fichiers des paquets sont dans /usr/lib/systemd/system, ceux de l'administrateur dans /etc/systemd/system, qui l'emporte.

  • Le serveur de cette unité plante avec le code de sortie 1. Que fait systemd ?

    ```ini
    [Unit]
    Description=Serveur app
    After=network.target

    [Service]
    User=app
    ExecStart=/opt/app/serveur
    Restart=on-failure

    [Install]
    WantedBy=multi-user.target
    `

    • Il le relance, car une sortie en échec entre dans Restart=on-failure
    • Il le laisse arrêté : seul Restart=always relance après une sortie en échec
    • Il le relance au prochain amorçage seulement, à cause de WantedBy=
    • Il arrête aussi network.target, dont le service dépend d'après After=
    Voir la réponse

    Il le relance, car une sortie en échec entre dans Restart=on-failure

    on-failure couvre une sortie avec un code non nul ou un signal. After= ne crée aucune dépendance, et WantedBy= ne sert qu'à enable.

  • Un fichier d'unité de service a trois sections : … pour la description et les dépendances, … pour la commande lancée, … pour ce que fait enable.

    Voir la réponse

    Un fichier d'unité de service a trois sections : [Unit] pour la description et les dépendances, [Service] pour la commande lancée, [Install] pour ce que fait enable.

    ExecStart=, User=, Type= et Restart= vont dans la section de la commande ; After= et Requires= dans la première ; WantedBy= dans la dernière.

  • Type de service (Type=) : de quoi s'agit-il ?

    Voir la réponse

    Directive qui dit à systemd comment savoir que le service est démarré : simple (le processus lancé est le service), forking (le père quitte, le fils reste), oneshot (la commande se termine, et c'est tout).

    Le défaut simple convient à un programme qui reste au premier plan : systemd le supervise et envoie ses sorties au journal. forking est pour les vieux démons qui se détachent seuls.

  • systemctl status app montre « Main process exited, code=exited, status=203/EXEC ». Quelle est la cause probable, et la solution ?

    • Le service manque de mémoire : relever la limite avec MemoryMax=
    • Le compte indiqué par User= n'existe pas : le créer avec useradd
    • Le chemin de ExecStart est faux ou le fichier n'est pas exécutable : vérifier avec ls -l, puis chmod +x ou corriger le chemin
    • Le port d'écoute est pris par un autre processus : en choisir un autre
    Voir la réponse

    Le chemin de ExecStart est faux ou le fichier n'est pas exécutable : vérifier avec ls -l, puis chmod +x ou corriger le chemin

    203/EXEC signale que systemd n'a pas pu exécuter la commande : chemin inexistant, droit d'exécution manquant ou interpréteur du script introuvable. Un compte inconnu donne 217/USER.