如何要求重新启动以停止 systemd 中的服务?

如何要求重新启动以停止 systemd 中的服务?

我想要一个只要系统启动就始终运行的服务,如果用户想要停止它,他们必须重新启动(出于安全原因),否则它将继续运行。

systemd 有这个选项吗?我四处寻找,却一无所获。

编辑:我希望只要系统运行,服务就运行,无论用户执行任何操作。如果服务停止,可能会让系统关闭吗?重点是让它不可能不运行,如果它停止了,整个系统就应该关闭。

答案1

man systemd.unit看到Requires=BindsTo=

当您说“系统”时,我假设您的意思是multi-user.target,但您可以将其替换为basic.target, default.target, graphical.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

相关内容