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

관련 정보