
Fedora 15 ボックスで実行しようとしている Python Web サービスがいくつかあります。これらは paster によって実行されており、起動時の唯一の違いは読み取る構成ファイルです。
これは systemd のインスタンス化されたサービスに適しているように思えますが、それらを単一のユニットとして制御できるようにしたいと思います。両方のサービスを必要とする systemd ターゲットは、その方法のように思えます。ターゲットを開始すると両方のサービスが開始されますが、ターゲットを停止すると両方のサービスが実行されたままになります。
サービス ファイルは次のとおりです。
[Unit]
Description=AUI Instance on Port %i
After=syslog.target
[Service]
WorkingDirectory=/usr/local/share/aui
ExecStart=/opt/cogo/bin/paster serve --log-file=/var/log/aui/%i deploy-%i.ini
Restart=always
RestartSec=2
User=aui
Group=aui
[Install]
WantedBy=multi-user.target
ターゲットファイルは次のとおりです。
[Unit]
Description=AUI
[email protected]
[email protected]
After=syslog.target
[Install]
WantedBy=multi-user.target
このようなグループ化は systemd でも可能でしょうか?
答え1
BindsTo
ユニットを結び付けるオプションの使用を検討してください。systemd.unit(5)
マニュアル ページでは次のように説明されています。
バインド先=
要件の依存関係を設定します。スタイルは Requires= と非常に似ていますが、この動作に加えて、リストされているユニットのいずれかが突然消えた場合にこのユニットが停止されることも宣言します。サービスが独自の選択で終了したり、デバイスが取り外されたり、systemd の関与なしにマウント ポイントがアンマウントされたりすると、ユニットが突然予期せず消えることがあります。
これは、必要なことを実行し、1 つのユニットを他のユニットに結び付けて、マスターが停止するたびにスレーブも停止し、起動時にその逆も行われるようにするはずです。
Before
必要に応じて、 / を使用しAfter
て開始順序を指定できることも忘れないでください。