Systemd est capable de gérer différents types de services différents, en particulier l'un des suivants
simple
- Un processus de longue durée qui ne se déroule pas en arrière-plan et reste attaché à la coque.
forking
- Un démon typique qui se fourche en le détachant du processus qui l'a exécuté, en se mettant en arrière-plan efficacement.
oneshot
- Un processus de courte durée qui devrait se terminer.
dbus
- Comme simple, mais la notification de la fin du démarrage des processus est envoyée via dbus.
notify
- Comme simple, mais la notification de la fin du démarrage des processus est envoyée via inotify.
idle
- Comme simple, mais le binaire est démarré après l'envoi du travail.
Dans votre cas, vous avez choisi Type=forking
ce qui signifie que systemd attend que le processus se termine lui-même et que le processus parent se termine, ce qui indique que le processus a démarré avec succès. Cependant, votre processus ne fait pas cela - il reste au premier plan et systemctl start
se bloque donc indéfiniment ou jusqu'à ce que le processus se bloque.
Au lieu de cela, vous le souhaitez Type=simple
, ce qui est la valeur par défaut afin que vous puissiez supprimer complètement la ligne pour obtenir le même effet. Dans ce mode, systemd n'attend pas la fin du démarrage des processus (car il n'a aucun moyen de savoir quand cela s'est produit) et continue donc à exécuter immédiatement les services dépendants. Dans votre cas, il n'y en a pas, donc cela n'a pas d'importance.
Une petite note sur la sécurité:
Vous exécutez le service en tant que root, cela est déconseillé car il est moins sécurisé que de l'exécuter en tant qu'utilisateur non privilégié. La raison en est que s'il y a une vulnérabilité dans jekyll qui permet en quelque sorte l'exécution de commandes (éventuellement via le code qu'il analyse), l'attaquant n'a rien d'autre à faire pour posséder complètement votre système. Si, d'autre part, il est exécuté en tant qu'utilisateur non privilégié, l'attaquant ne peut faire autant de dégâts que cet utilisateur et doit maintenant tenter d'obtenir des privilèges root pour posséder entièrement votre système. Cela ajoute simplement une couche supplémentaire aux attaquants.
Vous pouvez simplement l'exécuter en tant que même utilisateur qui exécute votre serveur Web, mais cela vous laisse ouvert à une autre attaque potentielle. S'il y a une vulnérabilité dans votre serveur Web qui permet à l'utilisateur de manipuler des fichiers sur votre système, il peut modifier les fichiers html générés, ou pire les fichiers source et amener votre serveur à servir tout ce qu'il veut. Cependant, si les fichiers générés et les fichiers source ne sont lisibles que par le serveur Web et inscriptibles par un autre utilisateur non privilégié, ils ne pourront pas, aussi facilement, les modifier en attaquant le serveur Web.
Cependant, si vous servez simplement des fichiers statiques de ce serveur et que vous maintenez le serveur à jour, ces attaques sont très peu probables - mais toujours possibles. Il est de votre responsabilité de peser les risques par rapport aux frais généraux liés à sa configuration en fonction de la gravité de votre système, mais ces deux conseils sont très simples à configurer et pratiquement sans frais de maintenance.
Type=forking
. De plus, il ne fonctionnera pasexecStart
comme une extension du shell, de sorte qu'à&
la fin il ne sera jamais compris comme un drapeau d'arrière-plan.