1、2時間検索しましたが、正しい解決策が見つからないようです。状況はこんな感じです。
いくつかのサービスがあります。 Dockerコンテナを実行しているサービスAを起動します。アプリケーションが起動し、ファイルisActive
システムのマウントされたディレクトリにファイルを書き込みます。
サービスとパス単位のファイルBがあります。 watch.pathはisActive
存在するのを待ち、watch.serviceを実行し、サービスファイルは「isActive
Exists!」をエコーします。
ロジックのこの部分はうまく機能します。サービスAの起動を使用しsudo journalctl -xefb
て監視した後、登録を完了してファイルに書き込みます。その後、サービスBユニットファイルが起動、エコー、完了を確認できます。
その後、サービスを監視するサービスBRequire
だけでなく、さまざまなサービスファイル(サービスC / D / E / F)もあります。After
ただし、サービスBが開始/終了する前にサービスC/D/E/Fが開始されます。
これは私の現在の「時計」サービスです:
# watch_for_client.path
[Unit]
Wants=A.service
After=A.service
[Path]
PathExists=/A/B/C/d.txt
[Install]
WantedBy=multi-user.target
# watch_for_client.service
[Unit]
After=A.service
[Service]
Type=oneshot
ExecStart=/bin/echo "file found"
その後、他のファイルに
[Unit]
Requires=wait_for_client.service
After=wait_for_client.service
[Service]
...
Type=simple
...
[Install]
WantedBy=multi-user.target
答え1
サービスC / D / E / Fのサービス単位ファイル構成で3つの点を変更する必要があります。
- [Unit]セクションで:この行を削除してください。
Requires=wait_for_client.service
- [Unit]セクション:名前が間違っており、サービスBの名前と一致する
After=wait_for_client.service
必要があります。After=watch_for_client.service
- {Installation] セクションでは、次のようになります。
WantedBy=watch_for_client.service