Écrire des fichiers de service systemd de base

103

Je développe une application Nodejs avec laquelle l'utilisateur interagit via HTTP sur localhost. Il n'y a pratiquement aucun paramètre et le démon n'a pratiquement aucune dépendance et il doit simplement être activé avant la connexion.

J'aimerais suivre les idiomes de chaque plate-forme sur chaque plate-forme, ce qui signifie Upstart sous Ubuntu et systemd sous Fedora.

  • Existe-t-il de bons tutoriels pour écrire des fichiers système Systemd?
  • Existe-t-il des «meilleures pratiques» à connaître?

J'ai trouvé ces ressources:

Je recherche principalement une sorte d'API comme référence, ainsi qu'un format de base à suivre.

beatgammit
la source
La page Arch Linux Wiki sur systemd contient une section intéressante sur la rédaction de fichiers de service.
Rudy Matela
> man systemd.service>> man systemd.unit
truezion

Réponses:

29

Je commencerais par les pages de manuel Systemd . Ils représentent une ressource complète du système et des services.

Il y a aussi la FAQ freedesktop Systemd .

jasonwryan
la source
43
Les pages de manuel vous seront utiles (j'aimerais cependant que ce soit plus propre), mais existe-t-il un tutoriel de base sur les fichiers système? Identique quelles pièces sont nécessaires, lesquelles sont recommandées et quelles pièces sont optionnelles. Les pages de manuel semblent supposer que je suis déjà un expert des fichiers système systemd, ce que je ne suis pas.
beatgammit
Pas que je sache, malheureusement. On suppose probablement que si vous écrivez des scripts de script, vous savez déjà comment écrire des scripts. Parcourez les scripts Arch et choisissez-en un qui soit similaire à ce dont vous avez besoin: archlinux.org/packages/community/i686/systemd
jasonwryan le
1
Merci! Avec votre aide et le blog que j'ai trouvé, j'ai pu en faire fonctionner un de base. Systemd semble beaucoup plus sympathique que celui d’upstart ou de l’ancien démon systemv init.
beatgammit
49
Qui a le temps là-bas vit pour commencer avec cela. Je veux dire, si vous savez ce que vous faites, c'est une excellente référence, mais sainte vache, les pages de manuel sont complexes.
Jonathan Komar
1
@ macmadness86 Le PO recherchait une source faisant autorité (voir le dernier paragraphe); pour la plupart des besoins, la lecture du fichier de service d'une application similaire, puis la consultation de parties spécifiques de la manpage seront plus que suffisantes pour vous y rendre. Ils sont en fait assez simples.
jasonwryan
180

L'exemple suivant est inspiré par ce lien, qui ne mentionne en fait pas toutes les étapes et est répertorié uniquement pour créditer la source: http://patrakov.blogspot.com/2011/01/writing-systemd-service-files.html

Étape 1 : J'ai créé ce fichier (emplacement de la note) qui déclenche essentiellement un processus bash avec un argument étendu. Vous pouvez déclencher votre propre commande qui pourrait être différente de bash.

[root@y500-fedora ~]# cat /etc/systemd/system/foo.service 
[Unit]
Description=foo

[Service]
ExecStart=/bin/bash -c "while true; do /bin/inotifywait -qq --event close_write /sys/class/backlight/acpi_video0/brightness; su myusername -c '/bin/xbacklight -display :0 -set $(cat /sys/class/backlight/acpi_video0/brightness)'; done"

[Install]
WantedBy=multi-user.target

Étape 2 :

Recharger systemd:

systemctl daemon-reload

Démarrer le nouveau service:

systemctl enable foo

(de même vous pouvez le disablefaire)

(facultatif) Étape 3 : il devrait démarrer automatiquement au prochain redémarrage en mode multi-utilisateur (niveau d'exécution 3), mais si vous souhaitez le démarrer immédiatement:

systemctl start foo
systemctl status foo # optional, just to verify

Mise à jour: Pour être complet, je devrais ajouter qu'ubuntu bionic semble avoir une page de manuel très complète. RTFM ici

nécromancien
la source
57
Merci de poster un tutoriel rapide et pas seulement de vous lier à des pages de manuel hors site!
Tobias J
2
systemctl a un raccourci de commande cat, pour référence.
Andy Bettisworth
Quel est le raccourci de commande chat? Comme un moyen de créer et d’éditer les fichiers de contrôle systemd sans entrer le chemin complet?
JpaytonWPD
Quelles sont les autorisations que ce fichier devrait idéalement avoir?
knocte
2
Selon la page de manuel systemd.unit, vous devriez le mettre en /etc/systemd/system. / usr / lib / systemd est l'endroit où les packages de distribution appropriés mettent leurs fichiers.
Wbkang
4

La documentation Redhat est une excellente source.

caracal
la source
2
Bien que cela puisse théoriquement répondre à la question, il serait préférable d’inclure ici les parties essentielles de la réponse et de fournir le lien à titre de référence.
Stephen Rauch le
1
@StephenRauch Je sais que les liens simples ne sont pas les bienvenus, mais le sujet est vaste et il n'est pas facile de résumer une réponse.
Caracal
C'était le guide le plus lisible que j'ai trouvé. C'est une bonne réponse. :-)
traitez bien vos mods
DigitalOcean propose également un ensemble assez complet de didacticiels et de documentation associée: digitalocean.com/community/tutorials/…
irbanana