Je prévois d'héberger plusieurs instances de la même application Web pour les clients utilisant systemd
. Je voudrais pouvoir stop
et start
chaque instance de client à l' aide systemd
, ainsi que le traitement de toute la collection des instances de clients comme un service unique qui peut être arrêté et démarré ensemble.
systemd
semble fournir les blocs de construction dont j'ai besoin PartOf
et les fichiers d'unité de modèle, mais je suis allé arrêter le service parent, le service client enfant n'est pas arrêté. Comment puis-je faire fonctionner cela avec systemd? Voici ce que j'ai jusqu'à présent.
Le fichier de l' unité mère, app.service
:
[Unit]
Description=App Web Service
[Service]
# Don't run as a deamon (because we've got nothing to do directly)
Type=oneshot
# Just print something, because ExecStart is required
ExecStart=/bin/echo "App Service exists only to collectively start and stop App instances"
# Keep running after Exit start finished, because we want the instances that depend on this to keep running
RemainAfterExit=yes
StandardOutput=journal
Un fichier de modèle d'unité nommé app@.service
, utilisé pour créer des instances client:
[Unit]
Description=%I Instance of App Web Service
[Service]
PartOf=app.service
ExecStart=/home/mark/bin/app-poc.sh %i
StandardOutput=journal
Mon app-poc.sh
script (preuve de concept qui s'imprime simplement dans un fichier journal en boucle):
#!/bin/bash
# Just a temporary code to fake a full daemon.
while :
do
echo "The App PoC loop for $@"
sleep 2;
done
Pour la preuve de concept, j'ai les fichiers d'unité systemd dedans ~/.config/systemd/user
.
Je lance ensuite le parent et une instance basée sur le modèle (après systemctl --user daemon-reload
):
systemctl --user start app
systemctl --user start app@customer.service
En utilisant, journalctl -f
je peux voir que les deux ont démarré et que l'instance client continue de s'exécuter. Maintenant, je m'attends à ce que l'arrêt du parent arrête l'enfant (parce que je l'ai utilisé PartOf
), mais ce n'est pas le cas. De plus, démarrer le parent ne démarre pas l'enfant comme prévu non plus.
systemctl --user stop app
Merci!
(J'utilise Ubuntu 16.04 avec systemd 229).
Requires=
place?