Kullanan müşteriler için aynı web uygulamasının birkaç örneğini barındırmayı planlıyorum systemd
. Ben edebilmek istiyorum stop
ve start
her bir müşteri örneği kullanılarak systemd
, hem de bir araya durdurulup başlatılabilir tek hizmet olarak müşteri örneklerinin koleksiyonun tamamını tedavi.
systemd
kullanmam gereken yapı taşlarını PartOf
ve şablon birimi dosyalarını sağlıyor gibi görünüyor , ancak ana hizmeti durdurdum, çocuk müşteri hizmetleri durdurulmadı. Bunu systemd ile nasıl çalıştırabilirim? İşte şimdiye kadar sahip olduğum şey.
Üst birim dosyası 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
app@.service
Müşteri örnekleri oluşturmak için kullanılan, adlandırılmış bir birim şablonu dosyası :
[Unit]
Description=%I Instance of App Web Service
[Service]
PartOf=app.service
ExecStart=/home/mark/bin/app-poc.sh %i
StandardOutput=journal
Benim app-poc.sh
senaryom (sadece bir döngüdeki günlük dosyasına yazdırmak için kavram kanıtı):
#!/bin/bash
# Just a temporary code to fake a full daemon.
while :
do
echo "The App PoC loop for $@"
sleep 2;
done
Kavramın kanıtı için, systemd birim dosyalarını içeri aldım ~/.config/systemd/user
.
Daha sonra üst ve şablon (sonra systemctl --user daemon-reload
) dayalı bir örnek başlatmak :
systemctl --user start app
systemctl --user start app@customer.service
Kullanarak journalctl -f
hem başlatıldığını hem de müşteri örneğinin çalışmaya devam ettiğini görebiliyorum. Şimdi ben ebeveynin kapatılmasını bekliyorum çocuğu durduracak (çünkü kullandım PartOf
), ama durmuyor. Ayrıca, ebeveynin başlatılması da çocuğu beklendiği gibi başlatmaz.
systemctl --user stop app
Teşekkürler!
(Sistemd 229 ile Ubuntu 16.04 kullanıyorum).
Requires=
bunun yerine kullanmanıza gerek yok mu?