systemdでサービスを停止するために再起動を要求する方法は?

systemdでサービスを停止するために再起動を要求する方法は?

私はシステムの起動中に常に実行されるサービスが欲しい。ユーザーがサービスを停止するには(セキュリティ上の理由から)、再起動する必要があります。それ以外の場合は実行を続けます。

systemdにこのオプションはありますか?私はどこでも検索しましたが、何も見つかりませんでした。

編集:ユーザーが何をしているかに関係なく、システムの実行中にサービスを実行したいと思います。サービスが停止するとシステムもシャットダウンできますか?実行しないようにすることがポイントであり、実行が停止したらシステム全体をシャットダウンする必要があります。

ベストアンサー1

man systemd.unit見ることからRequires=そしてBindsTo=

「システム」といえば を意味すると仮定しますが、これを、 、multi-user.targetに置き換えることもできます。basic.targetdefault.targetgraphical.target

マニュアルページを考えると、multi-user.targetRequires =と言うことができますyour.service。これにより、マニュアルページに以下が表示されます。

Requires=
    multi-user.target gets activated, your.service will be activated as well.
    If your.service fails to activate, and an ordering dependency After= on
    your.service is set, multi-user.target will not be started. 

multi-user.targetBindsTo= と言うと、your.serviceより良い結果が得られます。

BindsTo=
    In addition to the effect of Requires= it declares that if 
    your.service is stopped, multi-user.target will be stopped too.

    When used in conjunction with After= on the same unit the
    behaviour of BindsTo= is even stronger. In this case, 
    your.service has to be in active state for multi-user.target
    to also be in active state.  

関係を追加するのはRequires=簡単ではありません。でyour.service以下を追加します。

[Install]
RequiredBy=multi-user.target

合計がBindsTo=より困難です。に「挿入」を追加する必要がありますmulti-user.target

$ systemctl edit multi-user.target
[Unit]
BindsTo=your.service

おすすめ記事