(私はこの質問をクロス投稿しました。システムフラッグハブ)
2つのデーモンがあります。 1つはインスタンスに依存するサービスです。[Eメール保護]。私はその名前が何であるかは必ずしもわかりません。[Eメール保護]インスタンスはユニットファイルに書き込むときですが、a.serviceは確実に実行されているインスタンスの1つによって異なります。
私の解決策はb.targetを作成することでした。[Eメール保護]PartOf=a.target
とを含みますWantedBy=a.target
。
私はgraphic.targetが起動するたびにb.targetを起動したいので、理想的にはb.targetになりたいですWantedBy=graphical.target
。 a.serviceもでなければなりませんが、andもWantedBy=graphical.target
必要です(b.targetを起動しないでください。b.targetが起動しない場合は失敗する必要があります)。Requisite=b.target
After=b.target
[ a.service ]
| |
| Depends on |
v v
[ b.target ] <--is part of--[[email protected]]
| |
| Should be |
| started by |
v v
[graphical.target]
これsystemd.target ドキュメントtargetをインストールするには、use句を指定してくださいRequires=
。ただし、これにより、実際には必須のByまたはWantedBygraphical.targetになりたいときに依存関係の循環が生成されます。その逆ではありません。
WantedBy=graphical.target
これは、b.targetに[Install]セクションを追加した場合にのみ機能します。ドキュメントにはこれを行う必要があることは記載されていませんが、うまくいきます。起動すると、graphic.targetはb.targetを正しく起動し、b.targetが起動します。[Eメール保護]、graphic.targetもa.serviceを起動します。これは正しく待機します。[Eメール保護]スタート。
インスタンス化されたサービスに依存するサービスを処理する正しい方法ですか?これがターゲット間の依存関係を処理する正しい方法ですか?何かがうまくいっても、それが必ずしも正しい方法であることを意味するわけではありません。特に systemd には作業を行う「システム方式」があるので、従うだけで後で問題が緩和されることが多いです。