を使用しているお客様のために、同じWebアプリの複数のインスタンスをホストする予定ですsystemd
。を使用して、各顧客インスタンスを処理できるようにしたい。stop
またstart
、顧客インスタンスのsystemd
コレクション全体を、同時に停止および開始できる単一のサービスとして処理したい。
systemd
私が使用する必要のあるビルディングブロックPartOf
とテンプレートユニットファイルを提供しているようですが、親サービスを停止しましたが、子カスタマーサービスは停止していません。これをsystemdでどのように機能させることができますか?これが私が今まで持っているものです。
親ユニットファイル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
顧客インスタンスの作成に使用されます。
[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
スクリプト(ループでログファイルに出力するだけの概念実証):
#!/bin/bash
# Just a temporary code to fake a full daemon.
while :
do
echo "The App PoC loop for $@"
sleep 2;
done
概念実証のために、systemdユニットファイルをに用意しました~/.config/systemd/user
。
次に、テンプレートに基づいて親とインスタンスを起動します(後systemctl --user daemon-reload
):
systemctl --user start app
systemctl --user start app@customer.service
使用しjournalctl -f
てみると、両方が開始されていることと、お客様のインスタンスが引き続き実行されていることがわかります。今、私は親をシャットダウンすると子が停止することを期待しています(私がを使用したためPartOf
)。また、親を開始しても、期待どおりに子が開始されません。
systemctl --user stop app
ありがとう!
(私はsystemd 229でUbuntu 16.04を使用しています)。
Requires=
代わりに使う必要はありませんか?