Saya berencana meng-host beberapa contoh aplikasi web yang sama untuk pelanggan yang menggunakan systemd
. Saya ingin dapat stop
dan start
setiap instance pelanggan menggunakan systemd
, serta memperlakukan seluruh koleksi instance pelanggan sebagai layanan tunggal yang dapat dihentikan dan dimulai bersama.
systemd
tampaknya memberikan blok bangunan yang perlu saya gunakan PartOf
, dan templat file unit, tetapi pergi saya menghentikan layanan induk, layanan pelanggan anak tidak berhenti. Bagaimana saya bisa membuat ini bekerja dengan systemd? Inilah yang saya miliki sejauh ini.
Induk berkas Unit, 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
File template unit bernama app@.service
, digunakan untuk membuat instance pelanggan:
[Unit]
Description=%I Instance of App Web Service
[Service]
PartOf=app.service
ExecStart=/home/mark/bin/app-poc.sh %i
StandardOutput=journal
app-poc.sh
Skrip saya (Bukti konsep yang hanya mencetak untuk mencatat file dalam satu lingkaran):
#!/bin/bash
# Just a temporary code to fake a full daemon.
while :
do
echo "The App PoC loop for $@"
sleep 2;
done
Untuk bukti dari konsep, saya punya file Unit systemd di ~/.config/systemd/user
.
Saya kemudian memulai induk dan turunannya berdasarkan templat (setelah systemctl --user daemon-reload
):
systemctl --user start app
systemctl --user start app@customer.service
Dari menggunakan journalctl -f
saya dapat melihat bahwa keduanya mulai dan bahwa instance pelanggan terus berjalan. Sekarang saya-saya berharap mematikan orang tua akan menghentikan anak (karena saya menggunakan PartOf
), tetapi tidak. Juga, memulai orang tua juga tidak memulai anak seperti yang diharapkan.
systemctl --user stop app
Terima kasih!
(Saya menggunakan Ubuntu 16.04 dengan systemd 229).
Requires=
?