Ho intenzione di ospitare diverse istanze della stessa app Web per i clienti che utilizzano systemd
. Vorrei essere in grado di stop
e start
ogni istanza cliente utilizzando systemd
, così come trattare l'intera collezione di istanze dei clienti come un unico servizio che può essere interrotto e avviato insieme.
systemd
sembra fornire gli elementi costitutivi di cui ho bisogno PartOf
e i file di unità modello, ma ho smesso il servizio padre, il servizio clienti figlio non è stato arrestato. Come posso farlo funzionare con systemd? Ecco cosa ho finora.
Il file unità genitore, 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 file modello unità denominato app@.service
, utilizzato per creare istanze del cliente:
[Unit]
Description=%I Instance of App Web Service
[Service]
PartOf=app.service
ExecStart=/home/mark/bin/app-poc.sh %i
StandardOutput=journal
Il mio app-poc.sh
script (Proof of concept che stampa solo nel file di registro in un ciclo):
#!/bin/bash
# Just a temporary code to fake a full daemon.
while :
do
echo "The App PoC loop for $@"
sleep 2;
done
Per la dimostrazione del concetto, ho i file di unità systemd ~/.config/systemd/user
.
Quindi avvio il genitore e un'istanza in base al modello (dopo systemctl --user daemon-reload
):
systemctl --user start app
systemctl --user start app@customer.service
Dall'uso journalctl -f
vedo che entrambi sono stati avviati e che l'istanza del cliente continua a essere eseguita. Ora mi aspetto che lo spegnimento del genitore fermerà il bambino (perché l'ho usato PartOf
), ma non lo fa. Inoltre, l'avvio del genitore non sta nemmeno avviando il figlio come previsto.
systemctl --user stop app
Grazie!
(Sto usando Ubuntu 16.04 con systemd 229).
Requires=
invece?