私はsystemdfw.service
ユニットファイルを持っており、これは次の要件ですnetworking.service
。
# systemctl show networking -p Requires
Requires=system.slice fw.service
#
networking.service
そのactive
状態で実行すると、systemctl stop fw
数秒後にその状態が維持されsystemctl start fw
ます。ただし、状態で実行すると再起動します。networking.service
inactive (dead)
networking.service
active
systemctl restart fw
networking.service
これが予想される動作ですか?私の考えsystemctl restart
には基本的にsystemctl stop
ギリギリな瞬間systemctl start
なのでsystemctl start
発売しなければならないと思いますnetworking.service
。
ベストアンサー1
restart
stop
+ と似ていますstart
が、同じではありません。ジョブはサービスマネージャrestart
内で異なる方法で処理されますsystemd
。systemctl
インターフェースの単純な利便性ではありません。 [*]
この特定の動作で判断すると、現在のバージョンのman systemd.unit
.(少なくとも私のインストールではsystemd-239
)です。
行動がstop
文書化されました。そして動作はstart
文書とも一致します。明示的に文書化されていないのは、restart
必要な単位への伝播ですfw.service
。しかし、他の種類の依存関係でこれについてのヒントを見ました。
部分=
と同様に依存関係を構成します
Requires=
が、デバイスを停止して再起動することに制限されます。 systemdがここにリストされているデバイスを停止または再起動すると、ジョブはそのデバイスに伝播されます。これは一方向の依存関係です。このデバイスを変更しても、リストされているデバイスには影響しません。
ヒントは、PartOf=
がの制限されたサブセットである場合、Requires=
すべての操作が実行されることです。したがって、これには伝播再始動が含まれる。Requires=
PartOf=
networking.service
最初のステップで停止したくない場合に置き換えることができRequires=fw.service
ますWants=fw.service
。ただし、Requires=
ファイアウォールルールが有効になっていない場合は、ネットワークが絶対にアクティブにならないようにするために意図的に使用されているようです。
再起動が順次行われるようにnetworking.service
設定することで、アクティベーションなしでアクティブにならないようにすることもできます。実際にそのようなことが起こるかどうかは確認できませんでした。 (それがあなたが望むものなら、この答えではなく他の機関を検証することをお勧めします:-)。fw.service
After=fw.service
本当に欲しいなら、すでに設定しておくこともできそうWants=networking.service
です。これは、これらの依存関係が特定の順序を意味しないために可能です。私の考えでは、システムにクラッシュがある場合にのみ「依存関係循環」の問題があるようです。fw.service
networking.service
Requires=fw.service
注文する依存関係 -After=
とBefore=
設定。
[*]systemd-logind
たとえば再起動できるように設計、systemd
再起動後も特定の重要なファイルを開いたままにします。ただし、ログインするだけでstop
開いているファイルが失われます。 (私が知っている限り、systemd-logindを再起動すると、XorgまたはWaylandのすべての現在のバージョンはまだ中断されますが、systemd
コードがアイデアを異なる方法で処理していることがわかりますrestart
:-P)。